Проблема в перекрытии изображения с помощью OpenCv - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь просто наложить логотип с другим изображением, но получаю следующее:

error on line 10 : (-215:Assertion failed) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'cv::binary_op'

Фрагмент кода, который я пытаюсь запустить, выглядит следующим образом:

img2 = cv2.imread('Capture.jpg' , cv2.IMREAD_COLOR)
logo = cv2.imread('pyt.jpg')

rows , cols , channel = img2.shape
roi = img2[0:rows , 0:cols]
gray_img = cv2.cvtColor(logo , cv2.COLOR_BGR2GRAY)

ret , mask = cv2.threshold(gray_img , 220 , 255 , cv2.THRESH_BINARY)
#cv2.imshow('mask' , mask)
mask_inv = cv2.bitwise_not(mask)
#cv2.imshow('img' , mask_inv)

img_bg = cv2.bitwise_and(roi , roi , mask = mask_inv) #error on this line
#img_fg = cv2.bitwise_and(logo, logo , mask = mask)
#dst = cv2.add(img_bg , img_fg)
#logo[0:row , 0:col] = dst
#cv2.imshow('img' , img1)

cv2.waitKey(0)
cv2.destroyAllWindows()

1 Ответ

2 голосов
/ 17 апреля 2019

Хитрость в том, что маска должна иметь тот же размер, что и пункт назначения.Ошибка в вашем коде исходит из этой части:

rows , cols , channel = img2.shape
roi = img2[0:rows , 0:cols]

roi должен иметь размер логотипа, а не все изображение!

Вместо использования побитовых операций, этогораздо проще просто скопировать логотип, используя маску, конечно, будьте осторожны с размером ROI:

rows , cols = logo.shape[:2]
roi = img2[0:rows , 0:cols]

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