opencv canny:如果您正在使用黑白图像,minVal和maxVal是否重要?

时间:2016-01-30 13:28:56

标签: opencv opencv3.0 edge-detection canny-operator

前言:这是this question的延续。

请考虑以下代码,取自here

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('messi5.jpg',0)
edges = cv2.Canny(img,100,200) # Would 100 and 200 matter if your original image was black and white?

plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])

plt.show()

我的问题:

  • 使用open cv的canny功能时,如果你正在处理黑白图像,请选择minVal和maxVal吗?

我问的原因:

  • 我已尝试过很多价值观,而且看起来并不重要。

1 个答案:

答案 0 :(得分:2)

阈值执行很重要。

假设3x3 Sobel过滤器(如Canny中所示),您可以获得输入二进制dx图像的dy(0, 255)的可能值是:

-1020, -765, -510, -255, 0, 255, 510, 765, 1020

可能的幅度值是:

  1. L1 (默认):0, 510, 1020, 1530
  2. L2 0, 360.63, 510, 721.25, 806.38, 1020, 1081.87, 1140.40
  3. 因此,如果您使用,您将从Canny获得不同的输出图像,例如(minVal, maxVal)作为(200,400)(400,600)

    如果你使用相同间隔的阈值(间隔的边界是上面显示的幅度值),那么你将得到相同的结果。