#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()
этот код вставляет изображение в верхний левый угол фонового изображения.