Невозможно сопоставить размеры массива при кадрировании - PullRequest
1 голос
/ 01 июля 2019

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

import cv2

img=cv2.imread('messi.jpg',1)

ball=img[448:511,426:486]
img[190:253,450:510]=ball
cv2.imshow('messi',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ошибка, которую я получаю при выполнении этого:

строка 6, в img [190: 253,450: 510] = ball ValueError: не удалось передать массив ввода из фигуры (49,60,3) в фигуру (63,60,3)

Я был бы очень признателен, если бы кто-нибудь помог мне с этим. Спасибо!
Картинка для справки:

image

Ответы [ 2 ]

1 голос
/ 01 июля 2019

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

ball=img[448:511, 426:486]
             ^

В результате numpy выбирает строки только до максимального количествастрок, то есть 497. Следовательно, вы получаете ROI размером (49,60,3), потому что 497 - 448 = 49.

Убедитесь, что вы правильно обрабатываете границы.Просто для напоминания, при доступе к изображениям OpenCV с использованием индексирования с пустым фрагментом строки - это первое измерение, а столбцы - второе измерение, т. Е. Схема доступа выглядит следующим образом:

ball = img[rowStart : rowEnd, columnStart : columnEnd]
0 голосов
/ 01 июля 2019

Вы уверены, что обрезаете изображение прямо с той же библиотекой? Использование двух разных библиотек не рекомендуется. Например: PIL и CV2 обрезают изображение, но с разных начальных координат.

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