Opencv学習ログ24--ハフ変換2(最大間隔、最短の長さを制限できます)

序文

この記事では、主にopencvでのハフ変換の使用について説明します。

1.ハフ変換2

//第三题 霍夫划线(可限制最大间隔,最短长度)

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;

int main()
{
    
    
	cv::Mat dst;
	cv::Mat src = imread("C://Users//john//Desktop//1.jpg", 0);
	std::vector<cv::Vec4i>lines;
	Canny(src, dst, 75, 80, 3, false);
	//cv::imshow("src", src);
	//cv::imshow("dstMat", dst);
	cv::HoughLinesP(dst, lines, 5, CV_PI / 180, 90, 20, 35);
	std::vector<cv::Vec4i>::iterator it = lines.begin();
	for (int i = 0; it != lines.end(); it++, i++)
	{
    
    
		//float rho = (*it)[0], theta = (*it)[1];
		//cv::Point pt1, pt2;
		//double a = cos(theta);
		//double b = sin(theta);
		//double x0 = a*rho;
		//double y0 = b*rho;
		//pt1.x = cv::saturate_cast<int>(x0 + 1000 * (-b));
		//pt1.y = cv::saturate_cast<int>(y0 + 1000 * (a));
		//pt2.x = cv::saturate_cast<int>(x0 - 1000 * (-b));
		//pt2.y = cv::saturate_cast<int>(y0 - 1000 * (a));
		cv::Point pt1, pt2;
		pt1.x = lines[i][0];
		pt1.y = lines[i][1];
		pt2.x = lines[i][2];
		pt2.y = lines[i][3];
		//float k = (pt2.y - pt1.y) / (pt2.x - pt1.x);
		//float b = pt1.y - pt1.x*k;
		//pt1.x = 1000;
		//pt1.y = k*pt1.x + b;
		cv::line(src, pt1, pt2, cv::Scalar(255, 255, 255), 1, CV_AA);
	}
	cv::imshow("src", src);
	waitKey(0);
}

要約する

1.コードは直接実行できます。理解できない場合は、メッセージを残してください。

おすすめ

転載: blog.csdn.net/taiyuezyh/article/details/122800038