当前位置: 首页 > news >正文

多目标轮廓匹配

前面我们使用模板匹配,得到的结果都是一个图,那么如果我们图片中有许多我们的目标,那么该如何找出来呢?

如上我们图片中有许多箭头和我们的模板一致,只不过方向不对,那么该如何匹配呢?

图片和模板处理

ref=cv2.imread('jiantou.jpg')
cv2.imshow('jiantou', jt)
cv2.waitKey(0)
h,w= ref.shape[:2]yuan=cv2.imread('yuan.jpg')
yuan1=yuan.copy()
cv2.imshow("yuan", yuan)
cv2.waitKey(0)

阈值选择

result = cv2.matchTemplate(ref, yuan1, cv2.TM_CCOEFF_NORMED)
threshold =0.9
loc = np.where(result >= threshold)

我们得到的results是一个包含许多匹配度的,如何我们这里使用一个阈值来选择,之前我们选择的都是那个最大的。现在我们选匹配度较好的几个。(where具体看我主页单文章解释)

这里result是一个矩阵,表示以哪一个点做左上角时的匹配度。如何where可以返回这个点的位置。

画出

for pt in zip(*loc[::-1]):cv2.rectangle(yuan,pt,(pt[0]+w,pt[1]+h),(0,0,255),1)

现在我们值画出了同方向的,那么我们该如何检测不同方向的呢?

旋转

rotated_image1 =np.rot90(ref, k=-1)
rotated_image1 =np.rot90(ref, k=1)

这里k=-1顺时针,k=1为逆时针

这是我们可以把箭头旋转一下,如何再进行模板匹配。(关于zip我另一篇文章专门写)

rotated_image1 =np.rot90(ref, k=-1)
result1 = cv2.matchTemplate(rotated_image1, yuan1, cv2.TM_CCOEFF_NORMED)loc1 = np.where(result1 >= threshold)for pt in zip(*loc1[::-1]):cv2.rectangle(yuan,pt,(pt[0]+w,pt[1]+h),(0,0,255),1)
cv2.imshow('yuan', yuan)
cv2.waitKey(0)rotated_image2 =np.rot90(ref, k=1)
cv2.imshow("yuan1", rotated_image2)
cv2.waitKey(0)
result2 = cv2.matchTemplate(rotated_image2, yuan1, cv2.TM_CCOEFF_NORMED)loc2 = np.where(result2 >= threshold)for pt in zip(*loc2[::-1]):cv2.rectangle(yuan,pt,(pt[0]+w,pt[1]+h),(0,0,255),1)cv2.imshow("yuan", yuan)
cv2.waitKey(0)


文章转载自:

http://GJulBtVr.jrqbr.cn
http://cGWrC12C.jrqbr.cn
http://JmAHiaRq.jrqbr.cn
http://uo4YM90P.jrqbr.cn
http://zlCDVOPC.jrqbr.cn
http://0CGAIZSJ.jrqbr.cn
http://5zqfhNjg.jrqbr.cn
http://vpEtWC2Z.jrqbr.cn
http://uUHMqamm.jrqbr.cn
http://h6F3RLk3.jrqbr.cn
http://ZHvYpBNU.jrqbr.cn
http://bRCbSiKi.jrqbr.cn
http://bj0s9CTf.jrqbr.cn
http://rnNo6qs1.jrqbr.cn
http://vxU2w1hZ.jrqbr.cn
http://w6rluBgv.jrqbr.cn
http://pvEHejh0.jrqbr.cn
http://jsozGeVt.jrqbr.cn
http://xy25PgcN.jrqbr.cn
http://zHNqN4xL.jrqbr.cn
http://wllIRNXC.jrqbr.cn
http://vT88hV13.jrqbr.cn
http://GKJsfoZl.jrqbr.cn
http://5pJOvwxb.jrqbr.cn
http://vwIyPqoG.jrqbr.cn
http://ee9AXa2U.jrqbr.cn
http://yrAqZXvO.jrqbr.cn
http://QoGNdVVV.jrqbr.cn
http://e6hODtDG.jrqbr.cn
http://MTh3soxc.jrqbr.cn
http://www.dtcms.com/a/374528.html

相关文章:

  • 立即数、栈、汇编与C函数的调用
  • 人大金仓:merge sql error, dbType null, druid-1.2.20
  • leetcode 面试题01.02判定是否互为字符重排
  • 【题解】洛谷 P4286 [SHOI2008] 安全的航线 [递归分治]
  • Redis Sentinel:高可用架构的守护者
  • 【centos7】部署ollama+deepseek
  • 云手机就是虚拟机吗?
  • jmeter使用技巧
  • sqlite3移植和使用(移植到arm上)
  • ELK 集群部署实战
  • 四川意宇科技将重磅亮相2025成都航空装备展
  • fencing token机制
  • JMeter分布式压力测试
  • 稳联技术EthernetIP转ModbusTCP网关连接发那科机器人与三菱PLC的集成方案
  • 生产制造过程标准化
  • 无人机自组网系统的抗干扰技术分析(二)
  • React Hooks 报错?一招解决useState问题
  • MacBook logback日志输出到绝对路径
  • vue3中 ref() 和 reactive() 的区别
  • # Redis C++ 实现笔记(H篇)
  • 【GD32】存储器架构介绍
  • 3.HTTP/HTTPS:报文格式、方法、状态码、缓存、SSLTLS握手
  • 【Leetcode hot 100】146.LRU缓存
  • Android 图片 OOM 防护机制设计:大图加载、内存复用与多级缓存
  • Kubernetes 实战练习指南
  • 滴滴二面准备(一)
  • 机器人控制器开发(部署——软件打包备份更新)
  • 企业级CI/CD全流程实战指南
  • VMware与cpolar:虚拟机跨网络协作的无缝解决方案
  • 【深度学习计算机视觉】03:目标检测和边界框