利用霍夫变换来检测直线,计算检测到的直线的角度作为倾斜角度的例子用C++
时间: 2023-05-22 20:03:30 浏览: 281
当然可以!以下是一个简单的利用霍夫变换检测直线并计算倾斜角度的示例程序:
```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
// 读取输入图像
Mat src = imread("test.jpg", IMREAD_GRAYSCALE);
if (src.empty()) {
printf("无法读取输入图像!\n");
return -1;
}
// 进行霍夫变换
std::vector<Vec2f> lines;
HoughLines(src, lines, 1, CV_PI / 180, 100);
// 绘制直线并计算倾斜角度
Mat dst = src.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, 0, 255), 3, LINE_AA);
double angle = atan2(pt2.y - pt1.y, pt2.x - pt1.x) * 180 / CV_PI;
printf("检测到一条倾斜角度为 %.2f 度的直线\n", angle);
}
// 显示结果
imshow("src", src);
imshow("dst", dst);
waitKey();
return 0;
}
```
这个程序中,我们利用了 OpenCV 提供的 `HoughLines` 函数进行霍夫变换,并用 `line` 函数绘制直线。计算倾斜角度的方法是利用 `atan2` 函数计算直线的斜率,然后将弧度转化为角度。
阅读全文