Python和OpenCV-尝试将透明像素转换为白色非透明像素

时间:2018-10-26 16:14:42

标签: python opencv

我对使用OpenCV进行数据处理相对较新。对于机器学习项目,我正在尝试处理图像,以便所有透明像素都将变为白色非透明像素,以供GAN使用。但是,尝试处理该错误时,我总是遇到错误。 这是我的代码/

    img = cv2.imread(dirfName, cv2.IMREAD_UNCHANGED) (Note Dirftname is a defined variable)
    for col in img:                        
        for row in img[col]:                
            if(img[col,row] == (0,0,0,0)):                    
                    img[col,row] = (255,255,255,255)

    cv2.imwrite((fCropPath + fNameIndent + fname), new_img)

错误与if语句有关,它指出: ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()

1 个答案:

答案 0 :(得分:0)

请注意您的语法,rowcol不是索引。

import cv2
import numpy as np

img = cv2.imread(dirfName, cv2.IMREAD_UNCHANGED)
for col in img:
    for row in col:
        if(row.__eq__(0).all()): # This is what you want
                row += 255

cv2.imwrite((fCropPath + fNameIndent + fname), new_img)

row.__eq__(0).all()等效于np.all(row == 0)

此外,更好的做法是对循环进行矢量化处理:

import cv2
import numpy as np

img = cv2.imread(dirfName, cv2.IMREAD_UNCHANGED)
ind = np.equal(img, 0).all(axis=2)
img[ind] = np.array([255]*4)

cv2.imwrite((fCropPath + fNameIndent + fname), new_img)

上面的代码做的事情完全相同,只是矢量化了。