零基础入门机器视觉(八)

玩转直线检测和圆形检测
之前我们玩了一点边缘检测和轮廓检测,今天我们再玩玩简单的直线检测和圆形检测

在这里只讲运用,向了解具体细节的请点击下面链接

霍夫变换具体细节

直线检测,故名思意就要检测直线嘛,在这里检测采用的是霍夫变换,两个函数cv.HoughLines()和cv.HoughLinesP()
我们可以发现第二个函数比第一个函数多了一个P,这个P表示概率,而这个函数也是我们检测直线经常用到的一个函数。
那我们就来谈谈这个函数cv.HoughLinesP(参数1, 参数2, 参数3, 参数4,参数5, 参数6)
{
1)参数1为图像矩阵
2)参数2为像素级别的距离精度
3)参数3为像素级别的弧度精度
4)参数4为一个阈值 累加平面的阈值参数,即识别某部分为图中的一条直线时它在累加平面中必须达到的值。 大于阈值 的线段才可以被检测通过并返回到结果中。
5)参数5double有默认值0,表示最低线段的长度,比这个设定参数短的线段就不能被显现出来。就多少个像素值相同的点在一天直线上
6)参数6表示允许将同一行点与点之间连接起来的最大的距离
}
好了,当了解这些知识之后我们就可以实际的操作一下了

import cv2 as cv
import numpy as np


src = cv.imread('img3.jpg')

minLineLength = 20

maxLineGab = 5

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)

canny = cv.Canny(gray, 100, 200)

lines = cv.HoughLinesP(canny, 1, np.pi/180,100, minLineLength, maxLineGab)

for line_item in range(len(lines)):
    for x1, y1, x2, y2 in lines[line_item]:
        cv.line(src, (x1, y1), (x2, y2), (0, 0, 0))

cv.imshow('HoughLineP', src)

cv.waitKey()

cv.destroyAllWindows()

让我们看看运行的结果

零基础入门机器视觉(八)_第1张图片
可以看到在图中出现了一些黑线,当然参数的不同也会导致结果出现一定的的差异

圆形检测也是同样的道理,在这里就不再阐述了。

你可能感兴趣的:(机器视觉)