前言:这是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的选择是否重要?

  • 我问的原因:
  • 我已经尝试了很多值,但它们似乎并不重要。
  • 最佳答案

    阈值无关。

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

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

    可能的大小值为:
  • L1 (默认):0, 510, 1020, 1530
  • L2 :0, 360.63, 510, 721.25, 806.38, 1020, 1081.87, 1140.40

  • 因此,如果使用的话,您会从Canny获得不同的输出图像,例如(minVal, maxVal)作为(200,400)(400,600)

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

    关于opencv - opencv canny:如果要处理黑白图像,minVal和maxVal是否重要?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35102372/

    10-10 06:19