Img是我的输入图像,它是RGB
import cv2
import numpy as np
img = cv2.imread("Lenna.png")
black = cv2.cvtColor(img , cv2.cv.CV_BGR2GRAY)
现在我想使用filter2D
将sobel算子应用于它sobel = np.array([[-1 , 0 , 1] , [-2 , 0 , 2] , [-1 , 0 , 1] ])
dest = cv2.filter2D(black , -1 , sobel)
根据文档的-1参数是图像的深度,我认为是'uint8'或cv2.cv.CV_8U,当我做np.max(dest)它给我255,这是预期的
但是,当我将深度指定为cv2.cv.CV_32F时,即
dest = cv2.filter2D(black , cv2.cv.CV_32F , sobel)
并执行np.max(dest),它给出了一个大于255的不同值。有人可以解释原因吗?
答案 0 :(得分:4)
函数filter2D
以完全精度执行图像过滤,然后将结果值饱和到目标数据类型。实际上,输出图像包含更大范围的值。指定类型CV_32F
时,输出值保持不变。它们可能包含大于255且小于0的值。但是当类型为CV_8U
时,结果将被限制在CV_8U
数据类型的范围内。所有负值都变为0,所有大于255的值将变为255。