答案 0 :(得分:1)
我能想到的最简单的方法是Hough Transform(行HoughLines()
和段HoughLinesP()
或RANSAC(我无法找到RANSAC行检测器) OpenCV。然而,MRPT和PCL)中有一些有趣的实现。
编辑:extract lines from canny edge detection
中介绍了基于Canny()
和HoughLines()
的方法
答案 1 :(得分:1)
感谢Miki,865719,Photon和Humam Helfawi,
使用Hough-Transform后,我发现结果并不好。您可以在下图中看到:
这是我的代码:
int main(int argc, char** argv){
Mat src, dst, color_dst;
src=imread("stairs.png");
Canny( src, dst, 50, 200, 3 );
cvtColor( dst, color_dst, CV_GRAY2BGR );
vector<Vec4i> lines;
HoughLinesP( dst, lines, 1, CV_PI/180, 80, 30, 10 );
for( size_t i = 0; i < lines.size(); i++ )
{
line( color_dst, Point(lines[i][0], lines[i][1]),
Point(lines[i][2], lines[i][3]), Scalar(0,0,255), 3, 8 );
}
namedWindow( "Source", 1 );
imshow( "Source", src );
namedWindow( "Detected Lines", 1 );
imshow( "Detected Lines", color_dst );
waitKey(0);
return 0;}
感谢您的支持。
总管Hieu。
答案 2 :(得分:0)
您可以使用霍夫变换检测图像中的线条。
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html
(这个问题不够详细。)
答案 3 :(得分:0)
获取图像的轮廓并在轮廓上应用霍夫变换。 你会得到一些重复的线(彼此非常接近)..只是按照一些距离标准过滤它们