无法从形状广播输入数组 - OpenCV Python

Could not broadcast input array from shape - OpenCV Python

我正在尝试将一张图片插入到另一张使用 numpy 数组生成的图片之上。当我将此图像作为 jpeg 写入文件时,文件已正确写入。

nparr = np.frombuffer(msg.value(), np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)

但是当我添加图像时,出现错误,

img[y_offset:y_offset+logo.shape[0], x_offset:x_offset+logo.shape[0]] = logo
ValueError: could not broadcast input array from shape (160,160,4) into shape (160,160,3)

我的大图片尺寸 (img-jpeg) 是 1280x622 & 我的标志图片 (logo-png) 尺寸是 160x160。我将徽标插入为

logo = cv2.imread("logo.png", cv2.IMREAD_UNCHANGED)
x_offset=y_offset=50

img[y_offset:y_offset+logo.shape[0], x_offset:x_offset+logo.shape[0]] = logo

有没有办法解决这个问题,因为我是 Python 和 Numpy 的新手。

您的徽标图像似乎有一个 alpha 通道。由于我没有图像我无法完全测试,但试试这个:

img[y_offset:y_offset+logo.shape[0], x_offset:x_offset+logo.shape[0]] = logo[:,:,:3]

这只会将 logo 的前 3 个通道(B、G 和 R)放入 img

Edit: 也可以用cv2.imread()指定读取图片的方式:

cv2.imread("logo.png", cv2.IMREAD_COLOR)

这将忽略 alpha 通道。