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

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

目录
打赏
0
0
0
0
141
分享
相关文章
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
116 61
Python装饰器实战:打造高效性能计时工具
基于OpenCV的车牌识别系统源码分享
基于OpenCV的车牌识别系统主要利用图像边缘和车牌颜色定位车牌,再利用OpenCV的SVM识别具体字符,从而达到车牌识别的效果。
54 4
基于OpenCV的车牌识别系统源码分享
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
69 20
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
1048 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
82 4
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
192 1

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等