三天学会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);
相关文章
|
8天前
|
算法 计算机视觉
OpenCV(四十三):Shi-Tomas角点检测
OpenCV(四十三):Shi-Tomas角点检测
28 0
|
8天前
|
计算机视觉
OpenCV(三十八):二维码检测
OpenCV(三十八):二维码检测
70 0
|
8天前
|
编解码 计算机视觉
OpenCV(三十六):霍夫直线检测
OpenCV(三十六):霍夫直线检测
39 0
|
8天前
|
计算机视觉 索引
OpenCV(三十五):凸包检测
OpenCV(三十五):凸包检测
32 0
|
8天前
|
存储 资源调度 算法
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
|
8天前
|
存储 算法 计算机视觉
OpenCV(四十二):Harris角点检测
OpenCV(四十二):Harris角点检测
44 0
|
3天前
|
数据采集 Java 数据挖掘
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
|
8天前
|
机器学习/深度学习 传感器 算法
【OpenCV】告别人工目检:深度学习技术引领工业品缺陷检测新时代
【OpenCV】告别人工目检:深度学习技术引领工业品缺陷检测新时代
|
8天前
|
存储 计算机视觉 C++
Opencv(C++)学习系列---特征点检测和匹配
Opencv(C++)学习系列---特征点检测和匹配
109 0
|
8天前
|
计算机视觉 索引
OpenCV(三十二):轮廓检测
OpenCV(三十二):轮廓检测
21 0