python-3.x - 在 Python3.7.1 中使用 cv2.imread 形式的 Opencv3 读取 png 图像,并且在黑色窗口中根本没有像素

标签 python-3.x debugging image-processing png opencv3.0

我有两个 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()

图像:

好的: enter image description here

不正常: enter image description here

最佳答案

第一张图片是 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/

相关文章:

php - 如何在 PHP 中获得有用的错误消息?

node.js - Node Red 调试 Node 在 Bluemix 中不工作

image - 查找矩阵中元素的索引

mysql - 如何在 CodeIgniter 中显示数据库中的图像?

python - 在 sklearn 中使用自定义距离度量聚类

python - 提取字符串中特定列下的值

python - 按值排序后如何按字母顺序对字典的键进行排序?

python - 正则表达式: How to make my code match the '+' character OR digits

Android调试: java. lang.ArrayIndexOutOfBoundsException

c++ - 将 PNG(包括 Alpha)与原始 ARGB 缓冲区混合的 C/C++ 库