首页IT科技pythonopencv模板匹配sifi(【OpenCV–模板匹配】)

pythonopencv模板匹配sifi(【OpenCV–模板匹配】)

时间2025-06-16 07:18:32分类IT科技浏览3527
导读:目录...

目录

一            、模板匹配

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 np import matplotlib.pyplot as plt import cv2 as cv img=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_loc bottom_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 np import matplotlib.pyplot as plt import cv2 as cv img=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 np import matplotlib.pyplot as plt import cv2 as cv img=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()

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
句容网页(句容app) 分享赚钱是什么意思(分享赚钱的**有哪些-干货分享:2016年利用手机在网上薅羊毛赚钱)