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
142
分享
相关文章
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
Python 高级编程与实战:深入理解并发编程与分布式系统
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发、API 设计、网络编程和异步IO。本文将深入探讨 Python 在并发编程和分布式系统中的应用,并通过实战项目帮助你掌握这些技术。
Python 高级编程与实战:深入理解网络编程与异步IO
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发和 API 设计。本文将深入探讨 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
1061 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
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
296 1

热门文章

最新文章

AI助理

你好,我是AI助理

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