我正在尝试使用 cv2
以 .png
格式加载下面的图像。
但是,当我这样做时,结果数组是完全空的。
a = cv2.imread(img_path)
b = a != 0
b.any()
结果:错误
这是怎么回事?
我正在使用 Python 3 和 opencv 3.4.2。
最佳答案
问题是您的 Logo 全是黑色。白色部分看起来是白色的,因为你打开它的背景是白色的。当您使用 OpenCV 加载图像时 imread
默认使用的功能 cv2.IMREAD_COLOR
这将为您提供 BGR 图像并删除 alpha channel 。所以在这种情况下全为 0。
现在,如果您尝试使用 cv2.IMREAD_UNCHANGED
你会得到 alpha,你会看到它返回 True 请记住,当 alpha 为 0 时,它实际上是透明的,在 OpenCV 中为 255 不透明(从 0% 到 100%)
import numpy as np
import cv2
a=cv2.imread('a.png', cv2.IMREAD_UNCHANGED )
b=a!=0
print(b.any())
为了显示背景是黑色和透明的,标志是实心的和黑色的,让我们把实心信息放在白色:
a=cv2.imread('a.png', cv2.IMREAD_UNCHANGED )
a[a[:,:,3] == 255] = 255
b=a!=0
print(b.any())
# lets omit the alpha channel for now
cv2.imwrite('o.png', a[:,:,0:3])
cv2.imshow('a',a)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果是:
关于python-3.x - 使用 cv2 加载 png 时出错 - 结果数组为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54765194/