21 - 霍夫变换 - 直线检测
代码 和理解注释:
#include<opencv2/opencv.hpp>;
#include<opencv2/imgproc/types_c.h>;
#include<iostream>;
using namespace cv;
using namespace std;
int main(int argc, char* argv) { // 21 - 霍夫变换-直线检测
Mat source1,source1_Gray,change1;
source1 = imread("F:\\OpenCV-Test\\TestPicture\\SourcePicture1\\12.jpg");
if (!source1.data) { printf("can not load image ... \n"); return -1; }
imshow("source1", source1);
Canny(source1,source1_Gray,100,200); // Canny 边缘检测《前提》
// imshow("source1_Gray1", source1_Gray);
cvtColor(source1_Gray,change1, CV_GRAY2BGR); //灰度转为BGR
imshow("source1_Gray", source1_Gray);
vector<Vec4f> plines; // 二维浮点数组
HoughLinesP(source1_Gray,plines,1,CV_PI/180.0,10,0,10); // 霍夫直线检测
// (操作图像8-bit,线段坐标表示直线,扫描像素步长,生成极坐标角度步长,
// 阈值/一定数量的交点极坐标才当作直线,最小直线长度,最大间隔)
Scalar color = Scalar(100,100,100);
for (size_t i = 0; i < plines.size();i++) {
Vec4f hline = plines[i];
line(change1,Point(hline[0],hline[1]),Point(hline[2],hline[3]),color,3,LINE_AA); // 直线
}
imshow("change1",change1);
waitKey(0);
return 0;
}
代码演示效果:
奥瑞起源 发布了25 篇原创文章 · 获赞 0 · 访问量 524 私信 关注