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

简介: 三天学会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);
相关文章
|
7月前
|
算法 计算机视觉
OpenCV(四十三):Shi-Tomas角点检测
OpenCV(四十三):Shi-Tomas角点检测
94 0
|
7月前
|
计算机视觉
OpenCV(三十八):二维码检测
OpenCV(三十八):二维码检测
226 0
|
7月前
|
编解码 计算机视觉
OpenCV(三十六):霍夫直线检测
OpenCV(三十六):霍夫直线检测
150 0
|
7月前
|
计算机视觉 索引
OpenCV(三十五):凸包检测
OpenCV(三十五):凸包检测
87 0
|
7月前
|
存储 资源调度 算法
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
383 0
|
2月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
118 1
|
2月前
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
79 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
2月前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
90 0
|
7月前
|
存储 算法 计算机视觉
OpenCV(四十二):Harris角点检测
OpenCV(四十二):Harris角点检测
106 0
|
5月前
|
机器学习/深度学习 传感器 算法
OpenCV4工业缺陷检测的六种方法
OpenCV4工业缺陷检测的六种方法