我有两个 png 图像,一个 由 python 库 pillow 输出为 png,从 svg 字体图像转换而来,另一个 是由读取并重新保存的windows 10 的 png 画图程序。
奇怪的是,我使用 opencv3 cv2.imread 函数来读取这些图像,one 不行,只有黑色窗口,another 可以。
如何正确读取这些 png?
代码:
import cv2
image_file_path = r""
image = cv2.imread(image_file_path, cv2.IMREAD_ANYDEPTH)
if(! os.path.exists(image_file_path)):
print('NOT EXIST! = ' + image_file_path)
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow("image", image)
cv2.waitKey()
图像:
最佳答案
第一张图片是 4 channel RGBA 格式,具有完全无意义、完全不透明的 alpha channel ,您可以忽略它。
第二张图片是双 channel 灰色+Alpha 格式,其中所有像素都是纯黑色,形状仅在 Alpha channel 中定义。
所以,基本上你想要:
丢弃第一个图像的最后一个 channel ,您可以使用
cv2.IMREAD_COLOR
丢弃除第二张图像的最后一个 channel 之外的所有 channel ,您可以这样做:
im = cv2.imread('2.png',cv2.IMREAD_UNCHANGED)[:,:,-1]
我通过使用 ImageMagick 获得了上述信息,它包含在大多数 Linux 发行版中并且在 macOS 和 Windows 上可用。
我在终端中使用的命令是:
magick identify -verbose 2.png
示例输出
Image: 2.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 1040x1533+0+0
Units: Undefined
Colorspace: Gray
Type: Bilevel
Base type: Undefined
Endianess: Undefined
Depth: 8-bit
Channel depth:
Gray: 1-bit <--- Note 1
Alpha: 8-bit <--- Note 1
Channel statistics:
Pixels: 1594320
Gray:
min: 0 (0) <--- Note 2
max: 0 (0) <--- Note 2
mean: 0 (0)
standard deviation: 0 (0)
kurtosis: -3
skewness: 0
entropy: 4.82164e-05
Alpha:
min: 0 (0) <--- Note 3
max: 255 (1) <--- Note 3
mean: 50.3212 (0.197338)
standard deviation: 101.351 (0.397456)
kurtosis: 0.316613
skewness: 1.52096
entropy: 0.0954769
...
...
我在右上方用箭头和注释做了注释。
注意 1:这告诉我图像是灰度 + alpha
注意 2:这告诉我所有的灰度像素都是黑色的,因为最大值为零,最小值也为零
注3:这告诉我有一些完全透明的像素,还有一些完全不透明的像素
关于python-3.x - 在 Python3.7.1 中使用 cv2.imread 形式的 Opencv3 读取 png 图像,并且在黑色窗口中根本没有像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55292321/