删除OpenCV HoughLines检测到的小行

时间:2017-12-01 13:02:42

标签: opencv hough-transform canny-operator

我正在尝试从嘈杂的图像中检测线条,因此我得到了太多的线条。我需要多次遍历行,这对于那么多行来说太慢了,我只对足够长的行感兴趣。

我检测行的代码如下:

// Edge detection
int lowThreshold = 35;
Canny(greyMat, dst, lowThreshold, lowThreshold * 3, 3);
cv::blur(dst, dst, cv::Size(2,2));
// Standard Hough Line Transform
std::vector<cv::Vec2f> lines; // will hold the results of the detection
HoughLines(dst, lines, 1, rho_resolution, 150, 0, 0 ); // runs the actual detection

我的源图片是source image

Canny的结果图像为result image from Canny

HoughLines将检测100条线,我只对中间形成矩形的长线感兴趣。我怎样才能删除短线?如果我增加Canny阈值,则无法检测到我需要的某些行。

2 个答案:

答案 0 :(得分:1)

对图像进行模糊处理以减少噪点或帧中的微小细节,对我有用。

kernel = np.ones((5, 5), np.float32) / 25    
smoothed = cv2.filter2D(frame, -1, kernel)

gray=cv2.cvtColor(smoothed, cv2.COLOR_BGR2GRAY)

edge=cv2.Canny(gray, 100, 150)

lines = cv2.HoughLines(edge, 1, np.pi / 180, 200)
print(lines)

答案 1 :(得分:0)

一般来说,该方法是模糊图像,这样做是为了确保图像中的噪声被抑制,只留下要检测的物体的实际边缘。

使用的方法类型对图像是主观的。在提取边缘之前,您可以使用中值或/和高斯滤波器,并检查是否有任何改进。