使用C++实现霍夫变换
时间: 2024-04-08 09:25:29 浏览: 56
以下是使用C++实现霍夫变换的示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main() {
// 读取图像
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
// 进行霍夫变换
std::vector<cv::Vec2f> lines;
cv::HoughLines(image, lines, 1, CV_PI / 180, 100);
// 绘制检测到的直线
cv::Mat result(image.size(), CV_8UC3);
for (size_t i = 0; i < lines.size(); i++) {
float rho = lines[i][0];
float theta = lines[i][1];
cv::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));
cv::line(result, pt1, pt2, cv::Scalar(0, 0, 255), 2, cv::LINE_AA);
}
// 显示结果
cv::imshow("Hough Lines", result);
cv::waitKey(0);
return 0;
}
```
这段代码使用OpenCV库实现了霍夫变换来检测图像中的直线。首先,我们读取了一张灰度图像。然后,使用`cv::HoughLines`函数进行霍夫变换,将检测到的直线保存在`lines`向量中。接下来,我们创建了一个与原始图像大小相同的结果图像,并使用`cv::line`函数在结果图像上绘制检测到的直线。最后,我们显示了结果图像,并等待用户按下任意键关闭窗口。
阅读全文