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

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

相关文章
|
1月前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
106 61
Python装饰器实战:打造高效性能计时工具
|
4天前
|
存储 数据采集 数据库
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
|
28天前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
56 20
|
28天前
|
XML 机器学习/深度学习 人工智能
使用 OpenCV 和 Python 轻松实现人脸检测
本文介绍如何使用OpenCV和Python实现人脸检测。首先,确保安装了OpenCV库并加载预训练的Haar特征模型。接着,通过读取图像或视频帧,将其转换为灰度图并使用`detectMultiScale`方法进行人脸检测。检测到的人脸用矩形框标出并显示。优化方法包括调整参数、多尺度检测及使用更先进模型。人脸检测是计算机视觉的基础技术,具有广泛应用前景。
61 10
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
Python
python 预测目标(y)的转换
标签二值化 >>> from sklearn import preprocessing >>> lb = preprocessing.LabelBinarizer() >>> lb.
835 0
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
126 80
|
23天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码

热门文章

最新文章

推荐镜像

更多