文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【OpenCV--模板匹配】

2023-08-31 20:21

关注

目录

一、模板匹配

1.定义:

2.实现:

二、霍夫线检测

1.原理:

2.实现:

 三、霍夫圆检测

1.描述:

2.用法:

1.定义:

模板匹配就是在给定的图片中,查找和模板最相似的区域,算法的输入包括模板和图片,通过不断移动模板图片,计算其与图片对应区域匹配度,将匹配度最高区域选择为最终结果

2.实现:

result=cv.matchTemplate( img,template,method)

参数:

1>template :模板
2>method: 实现模板匹配的算法,主要有:
1.平方差匹配(CV_TM_SQDIFF):利用模板与图像之间的平方差进行匹配,最好的匹配是0,匹配越差,匹配的值越大。
2.相关匹配(CV_TM_CCORR):利用模板与图像间的乘法进行匹配,数值越大表示匹配程度较高,越小表示匹配效果差。
3.利用相关系数匹配(CV_TM_CCOEFF):利用模板与图像间的相关系数匹配,1表示完美的匹配,-1表示最差的匹配。

注意:完成匹配后,使用cv.minMaxLoc()方法查找最大值所在的位置即可,如果使用平方差作为比较方法,则最小值位置是最佳匹配位置。

import numpy as npimport matplotlib.pyplot as pltimport cv2 as cvimg=cv.imread('snow.jpg')#plt.imshow(img[:,:,::-1])#plt.show()template=cv.imread('snow1.jpg')h,w=template.shape[:2]result=cv.matchTemplate(img,template,cv.TM_CCORR)min_val,max_val,min_loc,max_loc=cv.minMaxLoc(result)top_left=max_locbottom_right=(top_left[0]+w,top_left[1]+h)cv.rectangle(img,top_left,bottom_right,(0,255,0),2)#设置颜色与宽度plt.imshow(img[:,:,::-1])plt.show()

 

1.原理:

霍夫变换常用来提取图像中的直线和圆等几何图形,霍夫空间中的一条线对应笛卡尔坐标系中一个点:

笛卡尔坐标系中两个点,对应霍夫空间一条直线

在霍夫空间内,经过一个点的直线越多,说明其在笛卡尔空间内映射的直线是由越多的点所构成,在笛卡尔空间中,可能存在斜率为无穷的直线,此时就需要采用极坐标

2.实现:

cv.HoughLines(img,rho,theta,threshold)

参数:

img:检测的图像,要求是二值化的图像,所以在调用霍夫变换之前首先要迸行二值化,或者迸行Canny边缘检测
rho、theta: 两个角度的精确度
threshold:阈值,只有累加器中的值高于该阈值时才被认为是直线

import numpy as npimport matplotlib.pyplot as pltimport cv2 as cvimg=cv.imread("straight.jpg")edges=cv.Canny(img,50,200)#plt.imshow(edges,cmap=plt.cm.gray)#plt.show()lines=cv.HoughLines(edges,0.8,np.pi/180,100)for line in lines:    rho,theta=line[0]    a=np.cos(theta)    b=np.sin(theta)    x0=rho*a    y0=rho*b    x1=int(x0+1000*(-b))    y1=int(y0+1000*a)    x2=int(x0-1000*(-b))    y2=int(y0-1000*a)    cv.line(img,(x1,y1),(x2,y2),(0,0,255))plt.imshow(img[:,:,::-1])plt.show()

 三、霍夫圆检测

1.描述:

OpenCV采用霍夫梯度法将霍夫圆检测范围两个阶段,第一阶段检测圆心,第二阶段利用圆心推导出圆圆心检测的原理:圆心是圆周法线的交汇处,设置-一个阈值,在某点的相交的直线的条数大于这个阈值就认为该交汇点为圆心。
圆半径确定原理:圆心到圆周上的距离(半径)是相同的,确定- 个阈值,只要相同距离的数量大
于该阈值,就认为该距离是该圆心的半径。

2.用法:

circles=cv.HoughCircles(image,method,dp,minDist,param1=100,param2=100,minRadius=0,maxRadius=0)

参数:

1>method: 使用霍夫变换圆检测的算法,它的参数是CV_ HOUGH_ GRADIENT
2>dp:霍夫空间的分辨率,dp=1时表示霍夫空间与输入图像空间的大小一致, dp=2时霍夫空间是输入图像空间的一半,以此类推
3>minDist为圆心之间的最小距离,如果检测到的两个圆心之间距离小于该值,则认为它们是同一个圆心
4>param1: 边缘检测时使用Canny算子的高阈值,低阈值是高阈值的一半
5>param2: 检测圆心和确定半径时所共有的阈值
6>minRadius和maxRadius为所检测到的圆半径的最小值和最大值

import numpy as npimport matplotlib.pyplot as pltimport cv2 as cvimg=cv.imread("straight.jpg")img1=cv.cvtColor(img,cv.COLOR_BGR2GRAY)img2=cv.medianBlur(img1,7)#plt.imshow(img2,cmap=plt.cm.gray)#plt.show()circles=cv.HoughCircles(img2,cv.HOUGH_GRADIENT,1,200,param1=100,param2=50,minRadius=0,maxRadius=100)circle1=circles[0, :, :]circle1=np.uint16(np.around(circle1))for c in circle1[:]:    cv.circle(img,(c[0],c[1],c[2],(0,0,255),2))    cv.circle(img,(c[0],c[1],c[2],(0,0,255),-1))plt.imshow(img[:,:,::-1])plt.show()

来源地址:https://blog.csdn.net/m0_70964767/article/details/127335102

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯