python-3.x - 使用 cv2 加载 png 时出错 - 结果数组为空

标签 python-3.x opencv

我正在尝试使用 cv2.png 格式加载下面的图像。

但是,当我这样做时,结果数组是完全空的。

enter image description here

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()

结果是:

enter image description here

关于python-3.x - 使用 cv2 加载 png 时出错 - 结果数组为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54765194/

相关文章:

python - 使用discord.py显示来自json的数据

python - 在 Matplotlib FuncAnimation 中制作动画时使用附加函数的困难

python - 一种优雅的方式来读取多个文件,但在 python 中对一个文件执行摘要

python-3.x - 创建一个绘制线图,其中线按类别着色?

c# - 为 CvMat.data union 创建 C# 结构或以任何方式在 C# 中访问它

python - 在 OpenCV python 中打开未压缩的 TIFF 文件

python-3.x - 如果Python列表是作为动态数组实现的,为什么追加操作后其id没有改变?

android - 使用 cv::Mat.submat opencv 时出错

c++ - 使用opencv进行运动检测的错误

c++ - 使用计算机视觉捕获图像时如何获取 3 个 channel 中的感兴趣区域?