Это кажется довольно простым, но я не получаю желаемого результата.Может кто-нибудь, пожалуйста, объясните мне, почему?У меня есть код ниже, чтобы сгенерировать 2D гауссовскую маску со средним значением в центре и сигмой как 1/3 высоты изображения для изображения 32x32 пикселей следующим образом:
def gauss2D(image):
x,y = image.shape[:2]
shape = (x,y)
sigma = 1/3 * min(x,y)
m,n = [(ss-1.)/2. for ss in shape]
y,x = np.ogrid[-m:m+1,-n:n+1]
h = np.exp( -(x*x + y*y) / (2.*sigma*sigma) )
h[ h < np.finfo(h.dtype).eps*h.max() ] = 0
h = h / h.max()
return h
Ниже приведено маскирующее изображениеЯ хочу использовать:
Код, который я использую для маскировки изображения, выглядит следующим образом:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
msk = gauss2D(gray)
masked_data = gray * msk
И полученныйизображение таково:
Пустое белое изображение, иногда несколько углов в углах просвечивают для некоторых разных изображений.
Я также пытался поразрядно И применить маску, но продолжаю получать эту ошибку, которую не могу исправить:
res = cv2.bitwise_and(gray, gray, mask = msk)
cv2.error: OpenCV (3.4.1)/Users/travis/build/skvark/opencv-python/opencv/modules/core/src/arithm.cpp:241: ошибка: (-215) (mtype == 0 || mtype == 1) && _mask.sameSize (* psrc1) в функции binary_op