利用LSD进行直线检测,代码经过亲自测试,示例代码如下:
img = imread("test.jpg")
Mat gray;
cvtColor(img, gray, CV_BGR2GRAY);
//建立直线检测
Ptr<LineSegmentDetector> lsd = createLineSegmentDetector();
vector<Vec4f> lines_lsd;
lsd->detect(gray, lines_lsd);
for (int i = 0; i < lines_lsd.size(); i++)
{
double x1 = lines_lsd[i][0];
double y1 = lines_lsd[i][1];
double x2 = lines_lsd[i][2];
double y2 = lines_lsd[i][3];
//筛选满足条件的点
if (abs(x1 - x2) + abs(y1 - y2) > 50)
{
# 将满足条件的点画出
line(img, Point2d(x1, y1), Point2d(x2, y2), Scalar(0, 255, 255), 2);
}
}