OpenCV-Python----学习-----------模板匹配-----------霍夫变换

目录

  • 1.模板匹配
    • 1.1 模板匹配基础
    • 1.2 多模板匹配
      • 1.2.1 获取匹配位置的集合
      • 1.2.2 循环
      • 1.2.3 调整坐标
      • 1.2.4 标记匹配图像的位置
  • 2.霍夫变换
    • 2.1 HoughLines函数
    • 2.2 HoughLinesP函数
    • 2.3霍夫圆环变换

1.模板匹配

1.1 模板匹配基础

result = cv.matchTemplate(image,templ,method,mask)
. image 为原始图像。
. templ 为模板图像。
. method为匹配方法。
. mask 为模板图像掩模(通常默认)。
. 返回值result是由每个位置的比较结果组合所构成的一个结果集,类型是单通道32位浮点型。
输入图像尺寸是WH,模板的尺寸是wh,则返回值大小为(W-w+1)*(H-h+1)

minVal,maxVal,minLocke,maxLoc=cv.minMaxLoc(src,mask)
. src 为单通道数组
. minVal为返回值的最小值,如果没有最小值,则可以是NULL。
. maxVal为返回值的最大值,如果没有最大值,则可以是NULL。
. minVal为最小值的位置,如果没有最小值,则可以是NULL。
. minVal为最大值的位置,如果没有最大值,则可以是NULL。
. mask为用来选取的掩模的子集,可选项。

OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第1张图片

OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第2张图片

1.2 多模板匹配

1.2.1 获取匹配位置的集合

res=np.where(res>=threshold)
. res 是函数cv.matchTemplate()进行模板匹配后的返回值。
. threshold是预设的阈值
loc是满足“res>=threshold”的像素点的索引集合

1.2.2 循环

for i in zip(*模板匹配索引集合):
OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第3张图片
OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第4张图片

1.2.3 调整坐标

numpy.where()得到的形式为“(行号,列号)”
cv.rectangle()使用的形式为“(列号,行号)”
所以 loc[::-1]

1.2.4 标记匹配图像的位置

OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第5张图片

OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第6张图片

2.霍夫变换

2.1 HoughLines函数

lines=cv.HoughLines(image,rho,theta,threshold)
. image 是输入图像,必须是8位的单通道二值图像
. rho为以像素为单位的距离r的精度。(一般是1)
. theta为角度θ的精度。一般情况下,使用的精度为π/180,表示要搜索所有的可能的角度。
. threshold是阈值。
. 返回值lines中的每个元素都是一对浮点数,表示检测到的直线的参数,即(r,θ),是numpy.ndarray类型。

OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第7张图片

OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第8张图片

2.2 HoughLinesP函数

lines = cv.HoughLinesP(image,rho,theta,threshold,minLineLength,maxLineGap)
. minLineLength用来控制“接受直线的最小长度”的值,默认为0
. maxLineGap 用来控制接守共线线段之间的最小间隔,即在一条线中两点的最大间隔。如果两点间的间隔超过了参数maxLineGap的值,就认为这两点不在一条直线上。默认值为0。

OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第9张图片

OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第10张图片

2.3霍夫圆环变换

circles=cv.HoughCircles(image,method,dp,minDist,param1,param2,minRadius,maxRadius)
. image:输入图像,8位的单通道灰度图像。
. method:检测方法(HOUGH_GRADIENT)
. dp: 累计分类器,它是一个分割比率,用来指定图像分辨率与圆心累加器分辨率的比例。
例如dp=1,则输入图像和累加器具有相同的分辨率。
. minDist:圆心间的最小间距。
. param1:它对应的是Canny边缘检测器的高阈值(低阈值为高阈值的二分之一)
. param2:圆心位置必须收到的投票数。
. minRadius:圆半径的最小值。
. maxRadius:圆半径的最大值。
. circles:返回值,由圆心坐标和半径构成的numpy.ndarray。

在调用函数之前,要对源图像进行平滑操作。

OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第11张图片

OpenCV-Python----学习-----------模板匹配-----------霍夫变换_第12张图片

你可能感兴趣的:(学习笔记,计算机视觉,opencv,python)