Сбой маскирования происходит из-за «сбоя подтверждения» ... sameSize - PullRequest
0 голосов
/ 23 декабря 2019

Я пытаюсь создать изображение, которое представляет собой только верхний белый многоугольник, заполненный, например, изображением бежевого цвета, чтобы при запуске minMaxLoc я не получал замаскированную область в результате. Моя маска и область интереса одного и того же размера, 100 x 100 искусственно, чтобы отладить это. Похоже, ошибка заключается в том, что они не одинакового размера.

#the mask
mask = np.zeros((100, 100))
cv2.fillPoly(mask,[pts],True,255)
mask = mask[0:100, 0:100]

#the region
roi = image[0:100, 0:100]
cv2.bitwise_and(roi, roi, mask = mask)

cv2.imshow('image',roi)
cv2.waitKey(0)

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

Изображения, показывающие mask , region

Редактировать

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

(minVal, maxVal, minLoc, maxLoc) = cv2.minMaxLoc(gray, mask)

, который выдает пустую маску:

error: (-215:Assertion failed) (cn == 1 && (_mask.empty() || _mask.type() == CV_8U)) || (cn > 1 && _mask.empty() && !minIdx && !maxIdx) in function 'minMaxIdx'

1 Ответ

0 голосов
/ 23 декабря 2019

Я решил это, немного изменив проблему. Убедитесь, что маска преобразована в правильный тип, а затем вызовите = minMax с параметром маски напрямую

    gray = cv2.cvtColor(orig, cv2.COLOR_BGR2GRAY)
    minMaxLoc = cv2.minMaxLoc(gray, mask = mask)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...