我有一个图像,我想检测它的边缘。我发现Canny已经被使用了很多(我不知道我是否有更好的选择)。我将值设置如下:
Imgproc.Canny(img, img, 10, 100, 3,true)
我已经更改了阈值,但没有看到我的图像发生太大变化。任何人都可以向我解释是否有合理的方法来计算出阈值的数字(我的图像是灰度)
谢谢...
答案 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)