Ошибка значения: не удалось передать входной массив из формы (48,64,3) в форму (0,1520,3)

#python #numpy #opencv #image-processing

Вопрос:

Итак, я пытаюсь использовать небольшое изображение, чтобы скрыть фон.

 background[top_left_height:top_left_height height][top_left_width:top_left_width width][:] = img
 

но я получил сообщение об ошибке.

Ошибка значения: не удалось передать входной массив из формы (48,64,3) в форму (0,1520,3)

В приведенном ниже коде показаны изображения, которые я использовал.

 background = cv2.imread("sample_data/background.jpg")
img = cv2.imread('sample_data/B1.jpg')
print(img.shape)
print(background.shape)
 

(48, 64, 3)

(720, 1520, 3)

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

1. Вам нужно background[right_slices] = img , где right_slices изготовить (48,64,3) фигуру. Вы не можете цепно индексировать, как вы это делаете. Сделайте эту индексацию шаг за шагом, чтобы понять, что я имею в виду. background[top_left_height:top_left_height height, top_left_width:top_left_width width, :] может быть, это то, что вы хотите — проверьте это.

2. С x=np.arange(12).reshape(3,4) x[1:,2:] помощью сравнения x[1:][2:] и. Посмотрите сами на x[1:] себя.

Ответ №1:

Вам нужен тот же фрагмент фонового изображения, что и форма img.

что-то вроде этого:

 import cv2
import numpy as np


background = cv2.imread("sample_data/background.jpg")
img = cv2.imread('sample_data/B1.jpg')
print(img.shape)
print(background.shape)

top_left_height = 0
top_left_width = 0
height = img.shape[0]
width = img.shape[1]

background[top_left_height:top_left_height height, top_left_width:top_left_width width] = img

cv2.imshow('img', background)
cv2.waitKey(0)
cv2.destroyAllWindows()
 

этот код вставляет изображение в верхний левый угол фонового изображения.