Невозможно загрузить изображение с помощью imread () - PullRequest
0 голосов
/ 13 мая 2018

Я не уверен, почему это происходит, но я не могу загрузить изображение с помощью 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 голосов
/ 14 мая 2018

Это происходит потому, что ваше изображение в режиме 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

0 голосов
/ 14 мая 2018

После загрузки изображения используйте это:

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
0 голосов
/ 14 мая 2018

Проблема в том, что ваше изображение не содержит ненулевых красных, зеленых или синих пикселей, оно полностью черное.Единственная причина, по которой он выглядит так, как вы показываете его с "@ @ 6 L", заключается в том, что у него есть альфа-канал / прозрачность, который маскирует черный цвет и выявляет белый цвет фона PNG.

Если вы посмотрите на него с помощью ImageMagick's 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 и просто использовать 4-й / альфа-канал:

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

Код, извлеченный из здесь .

0 голосов
/ 13 мая 2018

и проверьте, какие данные на самом деле загружаются.Проверьте размер с помощью image.shape (), либо посмотрите на максимальное / минимальное / среднее значение, либо, если вы используете spyder (настоятельно рекомендуется), посмотрите на данные в средстве просмотра переменных.

ps.для одного элемента отображения нет необходимости в команде plt.show()

...