OpenCV (4.0.0) Python Error: (-215: утверждение не выполнено) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize (* psrc1) в функции 'cv :: binary_op' - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь наложить маску на изображение с помощью opencv поразрядно.Я могу достичь этого результата, если я читаю как исходное изображение, так и изображение маски в режиме оттенков серого, но он не работает с 3-канальными изображениями.

Я прочитал эту тему OpenCV Python Ошибка: ошибка:(-215) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize (* psrc1) в функции cv :: binary_op , но моя проблема не в том, что формы массивов или маска не в формате uint8.

import cv2
import numpy as np 

img = cv2.imread("Original.png") # original image, shape 544,480,3, dtype uint8
label = cv2.imread("Mask.png") # black and white mask,shape 544,480,3, dtype uint 8
shape = img.shape # 544,480,3
black_background = np.zeros(shape=shape, dtype=np.uint8)
result = cv2.bitwise_not(img,black_background,mask=label) # this is where error occurs
cv2.imwrite("masked.png",result)

Я ожидаю, что на выходе будет оригинальное изображение, замаскированное меткой, я получаю сообщение об ошибке core

OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\core\src\arithm.cpp:245: error: (-215:Assertion failed) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'cv::binary_op'

1 Ответ

0 голосов
/ 29 мая 2019

Как показывает ошибка, проблема в действительности заключается в форме маски. Из документов :

mask - необязательная маска операции, 8-битный одноканальный массив, который определяет элементы выходного массива, которые необходимо изменить.

Ваш label является 3-канальным изображением, которое несовместимо; Вот почему серая шкала работала, но, поскольку ваше Mask.png на самом деле является черно-белым изображением, вам следует обратиться к нему без каких-либо забот:

label = cv2.imread("Mask.png", cv2.IMREAD_GREYSCALE)
...