Ошибка значения: не удалось передать входной массив из формы (240,320,3) в форму (480,640,3)

#python #numpy

#python #numpy

Вопрос:

Я попытался «вставить» изображения с измененным размером на черный фон исходного размера, чтобы сохранить размер изображения, и я использовал следующий код. Обратите внимание, что исходный размер изображения равен (640, 480), а коэффициент масштабирования равен 0,5 (т.Е. Изображение с измененным размером = (320, 240))

 new_img_w = int(scale_factor * orig_img_w)
new_img_h = int(scale_factor * orig_img_h)
new_scaled_img = cv2.resize(image, (new_img_w, new_img_h))
canvas = np.zeros_like(image)
x_lim = int(min(new_img_w,1)*orig_img_w)
y_lim = int(min(new_img_h,1)*orig_img_h)
canvas[:y_lim,:x_lim,:] = new_scaled_img[:y_lim,:x_lim,:] #Error message this line
new_scaled_img = canvas
 

И получил сообщение об ошибке в заголовке.
Не могли бы вы помочь мне устранить эту проблему? Заранее спасибо!

Комментарии:

1. Почему вы умножаете старые и новые измерения, чтобы получить ограничения? Мне это кажется неправильным.

Ответ №1:

Если ошибка возникает в

 canvas[:y_lim,:x_lim,:] = new_scaled_img[:y_lim,:x_lim,:] 
 

тест

 print(canvas[:y_lim,:x_lim,:].shape)
print(new_scaled_img[:y_lim,:x_lim,:].shape)
 

Похоже, у вас неправильный y_lim и x_lim . Если вы пытаетесь скопировать new_scaled_img в угол canvas , я бы посоветовал получить эти ограничения из

 new_scaled_img.shape
 

В любом случае вам необходимо убедиться, что размеры среза имеют смысл с обеих сторон назначения. Ничего не предполагайте. Проверьте!

Комментарии:

1. Я пытаюсь скопировать его в центр холста… но все еще не уверен, почему произошла ошибка…

2. min(new_img_w,1)*orig_img_w есть orig_img_w . Как canvas[:y_lim,:x_lim,:] и весь canvas массив. Вы не можете скопировать в него массив 1/4 такого размера! Как уже было сказано, исправьте эти ограничения нарезки. Обе стороны должны совпадать!

3. Как в списках, так и в массивах Python, срез за пределами границы не вызывает ошибки, но и не увеличивает размер. np.arange(10)[:20] по-прежнему является массивом из 10 элементов.

4. О, теперь я понимаю, что вы имеете в виду 🙂 Большое спасибо за вашу помощь!