一 学习内容
1. 霍夫变换--直线检测
1.1 在canny边缘检测基础上,进行霍夫变换直线检测
二 代码调试
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
int main() {
Mat src,dst_blur,dst_gray, dst_canny;
src = imread("e:/2 opencv_projects_zl/desk2.jpg");
if (!src.data) {
printf("Load Error...\n");
return -1;
}
namedWindow("Figure1",CV_WINDOW_AUTOSIZE);
imshow("Figure1", src);
//学习新内容:在边缘检测基础上,进行霍夫变换直线检测(思考:能否检测其他的线型?)
//1. 高斯模糊+灰度转化
GaussianBlur(src,dst_blur,Size(3,3),0,0);
cvtColor(dst_blur,dst_gray,CV_BGR2GRAY);
namedWindow("Figure2_gray", CV_WINDOW_AUTOSIZE);
imshow("Figure2_gray", dst_gray);
//2.canny边缘检测
Canny(dst_gray,dst_canny,100,200);
namedWindow("Figure3_canny", CV_WINDOW_AUTOSIZE);
imshow("Figure3_canny", dst_canny);
//3. 霍夫变换
//3.1 创建数组,用于存放检测结果
vector<Vec4f>plines;//前面需要添加语句using namespace std;
//3.2 调用函数
HoughLinesP(dst_canny, plines,1,CV_PI /180.0,10,5,20);//需要调试最后一个参数,使得检测出的直线连续、不间断。
Scalar color = Scalar(0,0,200);
for (size_t i = 0; i < plines.size(); i++)
{
Vec4f hline = plines[i];
line(src,Point(hline[0],hline[1]), Point(hline[2], hline[3]),color,3,LINE_4);//将直线绘制在src彩色图像上
}
namedWindow("Figure4line", CV_WINDOW_AUTOSIZE);
imshow("Figure4line", src);
waitKey(0);
return 0;
}
三 调试结果