HoughLinesP 设置线段长度
时间: 2024-06-08 20:06:52 浏览: 68
HoughLinesP 是一种基于概率的直线检测算法,它可以检测出图像中的直线,但并没有直接设置线段长度的参数。不过,你可以通过在后续的代码中添加逻辑来筛选出符合长度要求的直线段。
例如,你可以使用 cv::LineSegmentDetector 类来检测出线段,并使用线段的长度信息进行筛选。具体操作如下:
```cpp
cv::Mat img = cv::imread("test.jpg", cv::IMREAD_GRAYSCALE);
// 进行边缘检测
cv::Mat edges;
cv::Canny(img, edges, 50, 150);
// 检测直线段
cv::Ptr<cv::LineSegmentDetector> ls = cv::createLineSegmentDetector();
std::vector<cv::Vec4i> lines;
ls->detect(edges, lines);
// 筛选出长度大于 50 的直线段
std::vector<cv::Vec4i> filtered_lines;
for (auto line : lines) {
float length = cv::norm(cv::Point(line[0], line[1]) - cv::Point(line[2], line[3]));
if (length > 50) {
filtered_lines.push_back(line);
}
}
// 在图像上绘制直线段
cv::Mat line_img = cv::Mat::zeros(img.size(), CV_8UC3);
for (auto line : filtered_lines) {
cv::line(line_img, cv::Point(line[0], line[1]), cv::Point(line[2], line[3]), cv::Scalar(0, 0, 255), 2);
}
cv::imshow("lines", line_img);
cv::waitKey();
```
在上面的代码中,我们首先使用 Canny 边缘检测算法得到图像的边缘,然后使用 LineSegmentDetector 类检测直线段。最后,我们通过计算每条直线段的长度来筛选出符合要求的直线段,并在图像上绘制出来。
阅读全文