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()  # 释放所有窗体

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

相关文章
|
2天前
|
Python 数据安全/隐私保护 开发工具
练手必备!Python编程实战—23个有趣的实战项目带你快速进阶
Python的练手项目有哪些值得推荐? 已经有6.4W关注,700W次浏览,回答都有450条了,本来遇到这种问题我是不会回答的,毕竟已经有太多人给出了答案,我再去回答就没什么意义了。 但想了想确实有很多刚学Python的并不清楚从哪里去找项目来练手,于是就有了这篇文章,基于这个目的,我也是找了好久,最后还是选择了分享这份手册,毕竟里面有细致的讲解,确实更适合练手一些。
|
3天前
|
Python 数据采集 安全
淘宝商品评论数据爬取:Python实战指南
淘宝商品评论数据的自动爬取可以为市场分析和用户行为研究提供宝贵的信息资源。然而,这一过程需要严格遵守法律法规,尊重数据的版权和隐私。通过合理利用Python的网络爬虫技术,可以在遵循道德规范的前提下,高效地完成数据采集任务。 通过本文的指南,希望你能对淘宝商品评论数据的爬取有一个清晰的认识,并能够安全、合法地进行数据采集。
|
6天前
|
机器学习/深度学习 算法 数据挖掘
4小时学完!15年技术大牛用247个实战案例剖析的Python教程
今天给小伙伴们分享一份15年技术大牛用247个实战案例剖析的Python教程,这份教程全程彩图讲解,告别枯燥!60秒学会⼀个⼩例⼦,带你系统学习Python,从⼊门到⼤师。 涵盖了Python基础、Python字符串和正则、Python⽂件和⽇期、Python三⼤利器、Python绘图、Python之坑、Python第三⽅包、机器学习和深度学必知算法、Python实战、Pandas数据分析案例实战十大篇幅的精品案例教程
|
7天前
|
程序员 测试技术 Python
Python中的装饰器(Decorators) :深入解析与实战应用
Python中的装饰器(Decorators) :深入解析与实战应用
10 0
|
7天前
|
存储 算法 数据处理
Python中的列表(List) 类型详解与实战应用
Python中的列表(List) 类型详解与实战应用
|
8天前
|
JSON JavaScript 前端开发
Python selenuim实战
使用Selenium爬取苏宁易购商品信息,步骤包括打开网页、翻页、获取信息并保存至本地JSON文件。核心功能有滚动页面加载更多商品(模拟鼠标滚动)和抓取每页数据(提取标题和价格)。主程序通过循环实现自动翻页,直到无下一页按钮,最终将所有数据整合到一个JSON文件中。完整代码展示了所需导入的模块、滚动页面及获取数据的函数,以及主程序逻辑。
16 0
|
8天前
|
数据采集 数据挖掘 数据处理
Python数据分析实战:使用Pandas处理Excel文件
Python数据分析实战:使用Pandas处理Excel文件
83 0
|
19天前
|
算法 计算机视觉
OpenCV高斯差分技术实现图像边缘检测
OpenCV高斯差分技术实现图像边缘检测
|
21天前
|
计算机视觉
OpenCV图像运动模糊
OpenCV图像运动模糊
17 0
|
21天前
|
计算机视觉
OpenCV图像阈值
OpenCV图像阈值
7 0