2

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 的不同值。有人可以解释原因吗?

4

1 回答 1

4

该函数filter2D以全精度执行图像过滤,然后将结果值饱和到目标数据类型。实际上,输出图像包含更大范围的值。当您指定类型CV_32F时,输出值将保持原样。它们可能包含大于 255 且小于 0 的值。但是当类型为 时CV_8U,结果将被限制在CV_8U数据类型的范围内。所有负值都变为 0,所有大于 255 的值都将变为 255。

于 2013-02-08T10:30:41.793 回答