qtopencv HoughLinesP使用示例
时间: 2023-11-08 10:53:13 浏览: 122
Qtopencv是Qt的opencv库封装,可以方便地在Qt中使用opencv库的功能。以下是HoughLinesP函数的使用示例:
```c++
#include <QCoreApplication>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <QImage>
#include <QPixmap>
#include <QDebug>
using namespace cv;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 加载图片
Mat srcImage = imread("test.jpg");
// 转换为灰度图
Mat grayImage;
cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);
// 边缘检测
Mat edgeImage;
Canny(grayImage, edgeImage, 50, 150, 3);
// 直线检测
std::vector<Vec4i> lines;
HoughLinesP(edgeImage, lines, 1, CV_PI/180, 50, 50, 10);
// 绘制直线
Mat lineImage = srcImage.clone();
for (size_t i = 0; i < lines.size(); i++)
{
line(lineImage, Point(lines[i][0], lines[i][1]), Point(lines[i][2], lines[i][3]), Scalar(0, 0, 255), 3, LINE_AA);
}
// 显示结果
QImage qimg((const unsigned char *)lineImage.data, lineImage.cols, lineImage.rows, lineImage.step, QImage::Format_RGB888);
QPixmap pixmap = QPixmap::fromImage(qimg.rgbSwapped());
QLabel label;
label.setPixmap(pixmap);
label.show();
return a.exec();
}
```
在这个示例中,我们首先使用imread函数加载一张图片,然后将其转换为灰度图和边缘图。接着,我们使用HoughLinesP函数检测图像中的直线,并使用line函数将这些直线绘制到一张新的图像上。最后,我们将这张图像显示到Qt的窗口中。
HoughLinesP函数的参数解释如下:
- edgeImage:边缘图像,必须是单通道、8位、二值化的图像。
- lines:输出直线的向量。
- rho:极径步长,默认值为1。
- theta:极角步长,默认值为CV_PI/180。
- threshold:直线阈值,表示在一条直线上需要多少个交点才认为这条直线是有效的。默认值为80。
- minLineLength:直线的最小长度,默认值为0。
- maxLineGap:直线的最大间隔,默认值为0。
注意:以上代码仅供参考,实际使用中可能需要根据具体情况进行调整。
阅读全文