Проблема в том, что ваше изображение не содержит ненулевых красных, зеленых или синих пикселей, оно полностью черное.Единственная причина, по которой он выглядит так, как вы показываете его с "@ @ 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]
Код, извлеченный из здесь .