OpenCV多目标匹配绘制红框及统计铁路站台总数、最短距离地铁站实战(附Python源码)

简介: OpenCV多目标匹配绘制红框及统计铁路站台总数、最短距离地铁站实战(附Python源码)

需要源码和图片请点赞关注收藏后评论区留言私信~~~

多目标匹配

多目标匹配需要将原始图像中所有与模板相似的图像都找出来,使用相关匹配或者相关系数匹配可以很好的实现这个功能,如果计算结果大于某值,则认为匹配区域的图案和模板是相同的

实战1

为原始图片中所有匹配成功的图案绘制红框

结果如下图所示 左边的为模板图片 右边的是在原始图片中匹配到了三个与模板图片相似的图片,并且用红框圈出

代码如下

import cv2
img = cv2.imread(".jpg")  # 读取原始图像
templ = cv2.imread("template.png")  # 读取模板图像
width, height, c = empl.shape  # 获取模板图像的宽度、高度和通道数
results = cv2.matchemplate(img, templ, cv2.TM_CCOEFF_NORMED)  # 按照标准相关系数匹配
for y in range(len(results)):  # 遍历结果数组的行
    for x in range(ln(results[y])):  # 遍历结果数组的列
        if results[y][x] > 0.:  # 如果相关系数大于0.99则认为匹配成功
            # 在最佳匹配结位置绘制红色方框
            cv2.rectangimgx, y), (x + width, y + height), (0, 0, 255), 2)
cv2.imshow("temp",templ)
cv2.imshow("img, img)  # 显示匹配的结果
cv2.waitKey()   任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

实战2

多目标匹配在生活中有很多应用场景 例如统计一条线路的站台总数

模板如下

在原始图像中标记线路的各个站台,统计这条线路的站台总数

代码如下

import cv2
image = cv2.imread("imag.png")  # 读取原始图像
templ = cv2.imread("templp")  # 读取模板图像
height, width, c = templhape  # 获取模板图像的高度、宽度和通道数
results = cv2.matchTemplate(image, templ, cv2.TM_CCOEFF_NORMED)  # 按照标准相关系数匹配
station_Num = 0  # 初始化快轨的台个数为0
for y in range(len(results)):  # 遍历结果数组的行
    for x in range(len(results[y):# 遍历结果数组的列
        if results[y][x] > 0.99:  # 如果相关系数大于0.99则认为匹配成功
            # 在最佳匹配结果位置绘制蓝色矩形边框
            cv2.rectangle(image, (x, y), (x + width, y + height), (255, 0, 0), 2)
            station_Num += 1  # 快轨的站台个数加1
cv2.putText(image, "the numbersof stations: " + str(station_Num), (0, 30),
         cv2.FONT_HERSHEY_COMPLEX_SMA, (0, 0, 255), 1)  # 在原始图像绘制快轨站台的总数
cv2.imshow("temp",templ)
cv2.imshow("result", image)  # 显示匹配的结果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

实战3

同一地点附近有两个地铁站,优先选择直线距离最短的地铁站

可以先在原始图像中标记出这两个地铁站,然后计算坐标与这两个地铁站之间的直线距离

我们将匹配结果用蓝色边框圈出,然后用绿色线段标出直线距离最短的地铁站

代码如下

import cv2
import numpy as np
import ath
image = cv2.imread("image.png")  # 读取原始图像
templ =v2imead("templ.png")  # 读取模板图像
height, width, c = teml.shape  # 获取模板图像的高度、宽度和通道数
results = cv2.matchTemplate(image, templ, cv2.TM_CCOEFF_NORMED)  # 按照标准相关系数匹配
point_X = []  # 用于存储最佳匹配结果左上角横坐标的列表for y in range(len(results)):  # 遍历结果数组的行
    for x in range(len(results[y])):  # 遍历结果数组的列
       if results[y][x] > 0.99:  # 如果相关系数大于0.99则认为匹配成功
            # 在最佳匹配结果位置绘制红色方框
            cv2.rectangle(image, (x, y), (x + width, y + height), (255, 0, 0), 2)
            point_X.extend([x])  # 把最佳匹配结果左上角的横坐标添加到列表中
           point_Y.extend([y])  # 把最佳匹配结果左上角的纵坐标添加到列表中
# 出发点的横、纵坐标
start_X = 62
start_Y = 150
# 计算出发点到人民广场地铁站的距离
place_Square = np.array([point_X[0], point_Y[0]])
place_Start = np.array([start_X, start_Y])
start_Square = math.hypot(minus_SS[0], minus_SS[1])
#出发点到大路地铁站的距离
place_Highad = array([point_X[1], point_Y[1]])
nu_HS = place_Highroad - place_Start
start_Highroad = math.hypot(minus_HS[0], minus_HS[1])
# 用绿色的线画出距离较短的路线
if start_Square < start_Highroad:
    cv2.line(image, (start_X, start_Y), (point_X[0], point_Y[0]), (0, 255, 0), 2)
else:
    cv2.line(image, (start_X, start_Y), (point_X[1], point_Y[1]), (0, 255, 0), 2)
cv2.imshow("result", image)  # 显示匹配的结果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
8天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第36天】本文将带你走进Python的世界,从基础语法出发,逐步深入到实际项目应用。我们将一起探索Python的简洁与强大,通过实例学习如何运用Python解决问题。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供有价值的指导和灵感。让我们一起开启Python编程之旅,用代码书写想法,创造可能。
|
9天前
|
机器学习/深度学习 数据可视化 数据处理
Python数据科学:从基础到实战
Python数据科学:从基础到实战
18 1
|
5天前
|
数据采集 存储 数据处理
探索Python中的异步编程:从基础到实战
【10月更文挑战第39天】在编程世界中,时间就是效率的代名词。Python的异步编程特性,如同给程序穿上了一双翅膀,让它们在执行任务时飞得更高、更快。本文将带你领略Python异步编程的魅力,从理解其背后的原理到掌握实际应用的技巧,我们不仅会讨论理论基础,还会通过实际代码示例,展示如何利用这些知识来提升你的程序性能。准备好让你的Python代码“起飞”了吗?让我们开始这场异步编程的旅程!
13 0
|
9天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
Linux C语言 开发者
源码安装Python学会有用还能装逼 | 解决各种坑
相信朋友们都看过这个零基础学习Python的开篇了
447 0
源码安装Python学会有用还能装逼 | 解决各种坑
|
5天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
5天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
5天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!