OpenCV学习(54)

图像变换(8):累计概率霍夫变换: HoughLinesP()函数

此函数在 HoughLines的基础上,在末尾加了一个代表 Probabilistic(概率)的P,表明它可以采用累计概率霍夫变换(PPHT)来找出二值图像中的直线。

       第一个参数,InputArray类型的 image,输入图像,即源图像。需为8位的单通道二进制图像,可以将任意的源图载入进来后由函数修改成此格式后,再填在这里。
       第二个参数,InputArray类型的 lines,经过调用HoughLinesP函数后存储了检测到的线条的输出矢量,每一条线由具有4个元素的矢量(x_1,y_1,x_2,y_2)表示,其中,(x_l,y_1)和(x_2,y_2)是是每个检测到的线段的结束点。

       第三个参数,double类型的rho,以像素为单位的距离精度。另一种表述方式是直线搜索时的进步尺寸的单位半径。
       第四个参数,double类型的theta,以弧度为单位的角度精度。另一种表述方式是直线搜索时的进步尺寸的单位角度。
       第五个参数,int类型的 threshold,累加平面的阈值参数,即识别某部分为图中的一条直线时它在累加平面中必须达到的值。大于阈值 threshold 的线段才可以被检测通过并返回到结果中。
       第六个参数,double类型的 minLineLength,有默认值0,表示最低线段的长度,比这个设定参数短的线段就不能被显现出来。
       第七个参数,double类型的 maxLineGap,有默认值0,允许将同一行点与点之间连接起来的最大的距离。
对于此函数,依然是为大家准备了示例程序,如下。

代码:
 

#include 
#include
#include"opencv2/highgui/highgui.hpp"
#include
#include 
#include
#include
using namespace std;
using namespace cv;

int main()
{
	cv::utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//控制台不在输出日志文件
	Mat srcImage = imread("E:/pictures/2.jpg");
	Mat midImage, dstImage;

	Canny(srcImage, midImage, 50, 200, 3);
	cvtColor(midImage, dstImage, COLOR_GRAY2BGR);

	vectorlines;
	HoughLinesP(midImage, lines, 1, CV_PI / 80, 50, 10, 0);

	for (size_t i = 0; i < lines.size(); i++)
	{
		Vec4i l = lines[i];


		line(dstImage, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(186, 88, 255), 1, LINE_AA);
	}

	imshow("【原始图】", srcImage);
	imshow("【边缘检测后的图】", midImage);
	imshow("【效果图】", dstImage);

	waitKey(0);
	return 0;

}

运行截图:
OpenCV学习(54)_第1张图片

 

 OpenCV学习(54)_第2张图片

 OpenCV学习(54)_第3张图片

 

你可能感兴趣的:(opencv,学习,计算机视觉)