一,原图
二,代码
//霍夫变换检测直线
void HoughLinesP_Test()
{
Mat src = imread("D:\\原图.jpg", 0);
Mat CannyImg;
Canny(src, CannyImg, 140, 250, 3);
imshow("CannyImg", CannyImg);
Mat DstImg;
cvtColor(src, DstImg, CV_GRAY2BGR);
vector<Vec4i> Lines;
//void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta, int threshold,double minLineLength=0, double maxLineGap=0 )
//image : 边缘检测的输出图像.它应该是个灰度图(但事实上是个二值化图) *
//lines : 储存着检测到的直线的参数对 的容器,也就是线段两个端点的坐标
//rho : 参数极径 以像素值为单位的分辨率.我们使用 1 像素.
//theta : 参数极角 以弧度为单位的分辨率.我们使用 1度 (即CV_PI / 180)
//threshold : 要”检测” 一条直线所需最少的的曲线交点
//minLinLength : 能组成一条直线的最少点的数量.点数量不足的直线将被抛弃.线段的最小长度
//maxLineGap : 线段上最近两点之间的阈值
HoughLinesP(CannyImg, Lines, 1, CV_PI / 360, 170, 200, 15);
for (size_t i = 0; i < Lines.size(); i++)
{
line(DstImg, Point(Lines[i][0], Lines[i][1]), Point(Lines[i][2], Lines[i][3]), Scalar(0, 0, 255), 2, 8);
}
imshow("HoughLines_Detect", DstImg);
waitKey(0);
}
//测试
void CCutImageVS2013Dlg::OnBnClickedTestButton1()
{
HoughLinesP_Test();
}
三,结果
欢迎扫码关注我的微信公众号