Sobel运算符 - Opencv Python

时间:2013-02-08 09:15:08

标签: python image opencv filter

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 个答案:

答案 0 :(得分:4)

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