用另一个图像替换黑色背景

时间:2016-07-01 19:43:38

标签: python opencv

我正在尝试用另一个图像的像素替换图像中的所有黑色像素......

这是我到目前为止的代码 -

imgFront = cv2.imread('withoutbackground.jpg')
imgBack = cv2.imread('background.jpg')

height, width = img.shape[:2]

resizeBack = cv2.resize(imgBack, (width, height), interpolation = cv2.INTER_CUBIC)

for i in range(width):
    for j in range(height):
        pixel = imgFront[j, i]
        if pixel == [255, 255, 255]:
            imgFront[j, i] = resizeBack[j, i] 

但是我收到一条错误消息,指出此部分的语法不正确 -

pixel = imgFront[j, i]

这很奇怪,因为我正在查看opencv文档,以及它是如何表达的。

2 个答案:

答案 0 :(得分:0)

你的想法是正确的,但也有一些小错误。

首先,在第3行,它的形状应该是imgFront对吗?:

height, width = imgFront.shape[:2]

其次,在if pixel == [255, 255, 255]:行中,您应将其更改为:

np.all(pixel == [0, 0, 0])

黑色应为(0,0,0)

总而言之,以下代码对我来说很好:

import cv2
import numpy as np

imgFront = cv2.imread('withoutbackground.jpg')
imgBack = cv2.imread('background.jpg')

height, width = imgFront.shape[:2]

resizeBack = cv2.resize(imgBack, (width, height), interpolation = cv2.INTER_CUBIC)

for i in range(width):
    for j in range(height):
        pixel = imgFront[j, i]
        if np.all(pixel == [0, 0, 0]):
            imgFront[j, i] = resizeBack[j, i] 

答案 1 :(得分:-2)

我认为不可能使.jpg背景透明(见帖子:Transparent background in JPEG image

您可以尝试使用PNG或GIF。