繁体   English   中英

Python & OpenCV - 尝试将透明像素转换为白色不透明像素

[英]Python & OpenCV - Trying to turn transparent pixels into white nontransparent pixels

我对使用 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()

请注意您在 itterations、 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) 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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM