无法使用imread()

时间:2018-05-13 16:28:46

标签: python opencv image-loading

我不确定为什么会发生这种情况,但我无法使用imread()加载图像。我能够在绘画中打开该图像,并在保存该图像后,正在加载和显示图像。我正在使用Jupyter笔记本。

import os
import cv2
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline

def displayImage(image):
 plt.imshow(image)
 plt.show()

image = cv2.imread('path/to/image')
displayImage(image)

输出

Output

预期产出:

Expected Output

4 个答案:

答案 0 :(得分:2)

这是因为您的图片处于RGBA模式(您的背景是透明的)。 所以你需要在RGBA模式下阅读你的图像:

image = cv2.imread('path/to/image.png',-1)

或:

from scipy.ndimage import imread
rgba = imread('path/to/image.png', mode='RGBA')

结果:

enter image description here

答案 1 :(得分:1)

问题是您的图像不包含任何非零的红色,绿色或蓝色像素,它完全是黑色的。查看如何使用"@ @ 6 L"显示它的唯一原因是因为它有一个遮罩黑色的alpha /透明度通道并显示白色PNG背景颜色。

如果您使用ImageMagick identify查看它,您会看到:

identify -verbose a.png | more
Image: a.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 203x50+0+0
  Resolution: 37.79x37.79
  Print size: 5.37179x1.3231
  Units: PixelsPerCentimeter
  Colorspace: sRGB
  Type: Bilevel
  Base type: Undefined
  Endianess: Undefined
  Depth: 8-bit
  Channel depth:
    Red: 1-bit
    Green: 1-bit
    Blue: 1-bit
    Alpha: 8-bit
  Channel statistics:
    Pixels: 10150
    Red:
      min: 0  (0)
      max: 0 (0)                 <--- Brightest Red is zero
      mean: 0 (0)
      standard deviation: 0 (0)
      kurtosis: -3
      skewness: 0
      entropy: 0
    Green:
      min: 0  (0)
      max: 0 (0)                 <--- Brightest Green is zero
      mean: 0 (0)
      standard deviation: 0 (0)
      kurtosis: -3
      skewness: 0
      entropy: 0
    Blue:
      min: 0  (0)
      max: 0 (0)                  <--- Brightest Blue is zero
      mean: 0 (0)
      standard deviation: 0 (0)
      kurtosis: -3
      skewness: 0
      entropy: 0
    Alpha:
      min: 0  (0)
      max: 255 (1)                         <--- Alpha channel is only one with info
      mean: 16.477 (0.0646159)
      standard deviation: 58.73 (0.230314)
      kurtosis: 10.7342
      skewness: 3.50997
      entropy: 0.128008
   ...
   ...
   Background color: white       <--- Background is white
   ...
   ...

答案是使用cv2.IMREAD_UNCHANGED阅读所有四个频道,并使用第四个/ alpha频道:

def read_transparent_png(filename):
image_4channel = cv2.imread(filename, cv2.IMREAD_UNCHANGED)
alpha_channel = image_4channel[:,:,3]
rgb_channels = image_4channel[:,:,:3]

here中提取的代码。

答案 2 :(得分:0)

并检查实际加载的数据。使用image.shape()检查大小,查看最大/最小/平均值,或者如果使用spyder(强烈推荐),请查看变量查看器中的数据。

PS。对于单个显示项目,不需要plt.show()命令

答案 3 :(得分:0)

加载图片后使用:

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)