霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。霍夫变换于1962年由Paul Hough 首次提出[53],后于1972年由Richard Duda和Peter Hart推广使用[54],经典霍夫变换用来检测图像中的直线,后来霍夫变换扩展到任意形状物体的识别,多为圆和椭圆.
使用openCV API实现如下:
HoughLines() 最终输出极坐标,不常使用
HoughLinesP() 常用,输出的是直线上的两个点
cv::HoughLinesP()
minLineLenth = 0; //最小直线长度
maxLineGap = 0; //两直线间的最大间隔
代码:
Canny(src, src_gray, 100, 200); //先边缘检测,上下阈值200,100
Vector<Vec4f> Plines; //用于放直线的向量
HoughLinesP(src_gray, plines, 1, CV_PI / 180, 0, 10, 0); //若有斜线不连续,则调整这个值
Scalar color = Scalar(0, 0, 255); //设置颜色
for(size_t i = 0; i <Plines.size(); i ++) //划线
{
Vec4f hline = plines[i];
line(dst, Point(hline[0], hline[1]), Point(hline[2], hline[3]), color, 3, LINE_AA)
}
imshow("img", dst)
参考:
霍夫直线基础(python):http://m.blog.youkuaiyun.com/oQiCheng1234567/article/details/73055532