2016-07-01 30 views
0

我試圖取代所有黑色像素與其它圖像的像素的圖像中...與其它圖像替換黑色背景

這是代碼我有這麼遠

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

我不相信有可能讓.jpg背景變得透明(請參閱文章:Transparent background in JPEG image

您可以嘗試使用PNG或GIF代替。

+0

我不認爲他想讓它透明,但與另一個圖像 – VICTOR

+0

他的原始代碼表明他設置背景像素透明,然後將輸出保存爲JPEG,然後他問爲什麼背景是黑色的。 –

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]