我对使用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()
答案 0 :(得分:0)
请注意您的语法,row
和col
不是索引。
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)
上面的代码做的事情完全相同,只是矢量化了。