hough LIne transform之笔记

本文深入探讨了Hough变换在图像处理中的应用,特别是如何从图像中检测直线。通过解析OpenCV中HoughLines函数的实现细节,作者详细解释了如何从极坐标系转换到笛卡尔坐标系来绘制直线,以及为什么在计算直线端点时会使用1000这个数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  从图像中检测出直线蛮有趣的。

  最近研究了下hough transform,看别人写的原理以及代码。画出直线那有个地方不懂为啥,也没有找到解释。想了大半天才明白。

  于是第一篇博客就记录下这个。

  

float rho = lines[i][0], theta = lines[i][1];
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000 * (-b));
pt1.y = cvRound(y0 + 1000 * (a));
pt2.x = cvRound(x0 - 1000 * (-b));
pt2.y = cvRound(y0 - 1000 * (a));

  对于opencv 自带的HoughLines(dstImage, lines, 1, CV_PI / 360, 200, 0, 0);得到检测的结果,可以得到极径和角度。

问题是求pt1 pt2时为啥会出现1000?

  其实(x0,y0)是该直线经过的一点,1000作为线段的长度,1000*b就是线段长度在x轴的投影长度,而1000*a就是线段长度在Y轴上的投影。

  线段的左上角的点为(x0 + 1000 * (-b),y0 + 1000 * (a)),而右下角的点为(x0 - 1000 * (-b),y0 - 1000 * (a))。

line(srcImage, pt1, pt2, Scalar(255, 100, 5), 2, CV_AA);

  此函数就画出了一条直线。该直线的长度超过1000,单位是像素?

  接下来,试着自己编写标准HoughLine函数。

转载于:https://www.cnblogs.com/NEVER-OR-EVER/p/6080801.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值