三天学会opencv(十六)——霍夫直线检测

霍夫变换-直线

前提条件 – 边缘检测已经完成
平面空间到极坐标空间转换

API

cv::HoughLines(
InputArray src, // 输入图像,必须8-bit的灰度图像
OutputArray lines, // 输出的极坐标来表示直线
double rho, // 生成极坐标时候的像素扫描步长
double theta, //生成极坐标时候的角度步长,一般取值CV_PI/180
int threshold, // 阈值,只有获得足够交点的极坐标点才被看成是直线
double srn=0;// 是否应用多尺度的霍夫变换,如果不是设置0表示经典霍夫变换
double stn=0;//是否应用多尺度的霍夫变换,如果不是设置0表示经典霍夫变换
double min_theta=0; // 表示角度扫描范围 0 ~180之间, 默认即可
double max_theta=CV_PI
) // 一般情况是有经验的开发者使用,需要自己反变换到平面空间

cv::HoughLinesP(
InputArray src, // 输入图像,必须8-bit的灰度图像
OutputArray lines, // 输出的极坐标来表示直线
double rho, // 生成极坐标时候的像素扫描步长
double theta, //生成极坐标时候的角度步长,一般取值CV_PI/180
int threshold, // 阈值,只有获得足够交点的极坐标点才被看成是直线
double minLineLength=0;// 最小直线长度
double maxLineGap=0;// 最大间隔
)

代码

Canny(src, src_gray, 150, 200);
	cvtColor(src_gray, dst, CV_GRAY2BGR);
	imshow("edge image", src_gray);

	vector<Vec2f> lines;     
	HoughLines(src_gray, lines, 1, CV_PI / 180, 150, 0, 0);
	for (size_t i = 0; i < lines.size(); i++) { 
		float rho = lines[i][0]; // 极坐标中的r长度
		float 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));         
		line(dst, pt1, pt2, Scalar(0, 0, 255), 1, CV_AA); 
	}

	/*
	vector<Vec4f> plines;
	HoughLinesP(src_gray, plines, 1, CV_PI / 180.0, 10, 0, 10);
	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(OUTPUT_TITLE, dst);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
霍夫直线检测(Hough Line Transform)是一种常用的图像处理技术,用于检测图像中的直线OpenCV库中包含了对霍夫直线检测的支持。 在OpenCV中,使用`HoughLines`函数进行霍夫直线检测。函数的基本使用方法如下: ```python lines = cv2.HoughLines(image, rho, theta, threshold) ``` 参数说明: - `image`:输入的二值化图像,通常为边缘检测后的图像。 - `rho`:表示ρ(rho)参数的精确度,一般取1。 - `theta`:表示θ(theta)参数(角度)的精确度,一般取π/180。 - `threshold`:用于筛选直线的阈值,只有当累加器中的值大于阈值时,才被认为是一条直线。 函数返回的是一个由直线参数组成的数组,每个直线参数是一个(rho, theta)对,表示检测到的一条直线。可以根据需要对返回的直线进行后续处理或绘制。 另外,OpenCV还提供了`HoughLinesP`函数,它可以直接返回直线在图像上的起点和终点坐标,方便进行直线的绘制。 ```python lines = cv2.HoughLinesP(image, rho, theta, threshold, minLineLength, maxLineGap) ``` 除了上述参数外,`HoughLinesP`还包含两个额外的参数: - `minLineLength`:表示线段的最小长度,小于该长度的线段会被排除。 - `maxLineGap`:表示两条线段之间的最大间隔,超过该间隔的线段会被视为不同的线段。 希望这些信息能帮助到你进行霍夫直线检测!如有更多问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Loading_create

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值