Sobel算子 - Open Cv Python
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了。有人能解释一下原因吗?
1 个回答
4
这个函数 filter2D
是用来处理图像的,它会在很高的精度下进行过滤,然后把结果调整到目标数据类型。实际上,输出的图像会有更大的数值范围。当你指定类型为 CV_32F
时,输出的数值会保持原样,可能会有超过255的值,也可能会有小于0的值。但是如果你指定类型为 CV_8U
,那么结果就会被限制在 CV_8U
的范围内。所有负值都会变成0,而所有超过255的值都会变成255。