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

Я получаю эту ошибку:

cv2.error: OpenCV(4.1.2) 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' 

Я прочитал этот пост , в котором описывается моя проблема (другие вопросы этого не делают), но я не смог найти свой ответ оттуда.

вот мой код:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread("manzara.jpg")
imgOther = cv2.imread("fuzuli.jpg") # shape of this is 559, 419, 3

width, height, channel = img.shape # 768, 1024, 3
roi = img[0:width, 0:height]
imgOtherGray = cv2.cvtColor(imgOther, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(imgOtherGray, 220, 255, cv2.THRESH_BINARY_INV)

antiMask = cv2.bitwise_not(mask)


img_background = cv2.bitwise_and(roi, roi, mask=antiMask) # where error occurs
imgOther_fg = cv2.bitwise_and(roi, roi, mask=mask)

dst = cv2.add(img_background, imgOther_fg)
img[0:width, 0:height] = dst
cv2.imshow("image", img)

Ответы [ 2 ]

2 голосов
/ 18 января 2020

Я понял, что пытаюсь работать с неправильным изображением с именем "img", форма img больше, чем форма imgOther, поэтому это вызывает проблему. Я изменил код

width, height, channel = img.shape # 768, 1024, 3
roi = img[0:width, 0:height]

с

width, height, channel = imgOther.shape # 768, 1024, 3
roi = img[0:width, 0:height]

, и моя проблема решена

1 голос
/ 28 января 2020

У меня возникла похожая проблема, и я считаю, что ваша проблема связана с областью интересов (roi), которую вы используете. Вкратце: вы попытались выбрать интересующую область, которая содержала бы координаты, которых не было в исходном изображении.

В OpenCV вы определяете ROI следующим образом (при условии, что вы уже открыли изображение с именем "изображение")

roi = image[y1:y2,x1:x2]

Здесь координата (x1, y1) будет относиться к верхнему левому углу изображения, а координата (x2, y2) будет нижним правым углом изображения.

В своем коде вы смешали ширину (x) и высоту (y), перечислив сначала x (ширину). OpenCV делает их противоположным образом, сначала с помощью переменной y (высоты). Вам следует изменить свою переменную roi на следующее:

roi = img[0:height,0:width]

Это создаст область интереса, которая будет размером всего вашего изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...