#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. О, теперь я понимаю, что вы имеете в виду 🙂 Большое спасибо за вашу помощь!