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 に答える