写一段用hough变换检测直线的C++代码
以下是使用OpenCV库实现Hough变换检测直线的C++代码:
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
// 读取一张图片
Mat src = imread("test.jpg", IMREAD_GRAYSCALE);
// Canny边缘检测
Mat edges;
Canny(src, edges, 50, 150);
// Hough变换检测直线
std::vector<Vec2f> lines;
HoughLines(edges, lines, 1, CV_PI/180, 100);
// 绘制直线
Mat result;
cvtColor(edges, result, COLOR_GRAY2BGR);
for(size_t i = 0; i < lines.size(); i++)
{
float rho = lines[i][0], theta = lines[i][1];
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));
line(result, pt1, pt2, Scalar(0, 0, 255), 2, LINE_AA);
}
// 显示结果
imshow("Source Image", src);
imshow("Detected Lines", result);
waitKey(0);
return 0;
}
代码中使用imread函数读取一张图片,然后调用Canny函数进行边缘检测,得到一张二值化的图像。接着调用HoughLines函数进行Hough变换检测直线,得到一组直线参数rho和theta。最后在原图上绘制检测到的直线,然后显示结果。
注意,在绘制直线时,需要将Hough变换检测到的直线参数rho和theta转换为直线的两个端点,即(x1, y1)和(x2, y2),然后调用line函数绘制直线
原文地址: https://www.cveoy.top/t/topic/fJYA 著作权归作者所有。请勿转载和采集!