opencv canny:如果您处理的是黑白图像,minVal 和 maxVal 是否重要?
opencv canny: Do minVal and maxVal matter if you're working with a black and white image?
前言:这是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
因此,如果您使用 (minVal, maxVal)
作为 (200,400)
或 (400,600)
,您将从 Canny 获得不同的输出图像。
如果您使用同一区间内的阈值(区间的边界是上面显示的幅度值),那么您将始终获得相同的结果。
前言:这是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
因此,如果您使用 (minVal, maxVal)
作为 (200,400)
或 (400,600)
,您将从 Canny 获得不同的输出图像。
如果您使用同一区间内的阈值(区间的边界是上面显示的幅度值),那么您将始终获得相同的结果。