OpenCV C++ 直线检测:使用 Canny 和 Hough 变换
OpenCV C++ 直线检测:使用 Canny 和 Hough 变换
本代码使用 OpenCV 和 C++,演示如何检测图像中的直线。它利用 Canny 边缘检测算法来找到边缘,然后使用 Hough 变换来检测直线。检测到的直线将用绿色标记,并在窗口中显示结果。
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
// 读取图片
Mat img = imread('test.jpg');
// 灰度化
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
// 边缘检测
Mat edges;
Canny(gray, edges, 50, 200, 3);
// 直线检测
std::vector<Vec2f> lines;
HoughLines(edges, lines, 1, CV_PI/180, 150, 0, 0);
// 绘制直线
Mat dst = img.clone();
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(dst, pt1, pt2, Scalar(0, 255, 0), 3, LINE_AA);
}
// 显示结果
imshow('Original Image', img);
imshow('Edges', edges);
imshow('Detected Lines', dst);
waitKey();
return 0;
}
代码解释:
- 读取图片: 使用
imread()函数读取图像文件。 - 灰度化: 使用
cvtColor()函数将图像转换为灰度图像。 - 边缘检测: 使用
Canny()函数检测图像边缘。 - 直线检测: 使用
HoughLines()函数检测图像中的直线。 - 绘制直线: 使用
line()函数在原始图像上绘制检测到的直线。 - 显示结果: 使用
imshow()函数显示原始图像、边缘检测结果和直线检测结果。
注意:
- 代码中使用的
test.jpg文件需要在程序运行的目录下。 - 可以调整
Canny()和HoughLines()函数的参数来改变检测效果。 - 此代码仅演示如何检测图像中的直线,具体的应用场景可能需要根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/jxIy 著作权归作者所有。请勿转载和采集!