2

前言:这是这个问题的延续。

考虑以下代码,取自此处

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

我问的原因:

  • 我已经尝试了许多值,但它们似乎并不重要。
4

1 回答 1

4

阈值确实很重要。


假设一个3x3Sobel 滤波器(如 中Canny),对于输入二值图像,您可以获得的dx和的可能值是:dy(0, 255)

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

可能的幅度值为:

  1. L1(默认)0, 510, 1020, 1530:。
  2. L20, 360.63, 510, 721.25, 806.38, 1020, 1081.87, 1140.40

因此,如果您使用,例如(minVal, maxVal)as(200,400)或,您将从 Canny 获得不同的输出图像(400,600)

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

于 2016-01-30T14:36:31.267 回答