Canny门槛的最佳价值

时间:2014-08-04 18:59:03

标签: opencv edge-detection

我有一个图像,我想检测它的边缘。我发现Canny已经被使用了很多(我不知道我是否有更好的选择)。我将值设置如下:

  Imgproc.Canny(img, img, 10, 100, 3,true)

我已经更改了阈值,但没有看到我的图像发生太大变化。任何人都可以向我解释是否有合理的方法来计算出阈值的数字(我的图像是灰度)

谢谢...

3 个答案:

答案 0 :(得分:5)

我认为这应该是个案,如果你发布一些样本图片会很有用,但我会尽力回答。这是来自Opencv Documents

Canny( detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size );
where the arguments are:

detected_edges: Source image, grayscale
detected_edges: Output of the detector (can be the same as the input)
lowThreshold: The value entered by the user moving the Trackbar
highThreshold: Set in the program as three times the lower threshold (following Canny’s recommendation)
kernel_size: We defined it to be 3 (the size of the Sobel kernel to be used internally)

通常适合我的是highThreshold = 255 and lowThreshold = 255/3

答案 1 :(得分:2)

正如Samer所说,可能视情况而定。以下是一些代码,这些代码在opencv中使用跟踪栏,并在原始图像旁边显示canny图片,以便快速尝试使用不同的阈值。

SpreadsheetApp.openById

答案 2 :(得分:0)

您可以使用此公式,它很有用,您可以应用更蓝的颜色来增强它。

blurred_img = cv2.blur(img,ksize=(5,5))
med_val = np.median(img) 
lower = int(max(0 ,0.7*median_pix))
upper = int(min(255,1.3*median_pix))
edges = cv2.Canny(image=img, threshold1=lower,threshold2=upper)