Создание массива массива на 3 каналах никогда не работает - PullRequest
2 голосов
/ 04 июля 2019

У меня есть 3-х канальный массив, то есть изображение, и я хочу замаскировать некоторые области, а затем вычислить среднее значение для немаскированных областей. Когда я иду, чтобы преобразовать мой массив NumPy в массив NUMPI в маске, я всегда получаю следующую ошибку:

повышение MaskError (msg% (nd, nm))
numpy.ma.core.MaskError: Маска и данные не совместимы: размер данных 325080, размер маски 108360.

Моя форма массива (изображения): (301, 360, 3) для справки. Я создаю маску, создавая дублирующий массив нулей, а затем рисую многоугольник 1 (True) на маске.

Мой код:

mask = np.zeros((src.shape[0], src.shape[1], 1), dtype='uint8')
cv2.drawContours(mask, [np.array(poly)], -1, (1,), -1)
msrc = np.ma.array(src, mask=mask, dtype='uint8')  # error on this line
mean = np.ma.mean(msrc)

Что я делаю не так и как я могу это исправить, чтобы успешно создать замаскированный массив в numpy?

1 Ответ

0 голосов
/ 04 июля 2019

Как указано в комментариях, numpy не рассматривает изображения, это просто математика. OpenCV абстрагирует эту математику от простых манипуляций с изображениями.
Чтобы замаскировать изображение с помощью OpenCV, вы можете использовать
masked_img = cv2.bitwise_and(src,src,mask=mask).
( * Docs 1006 *)

...