разница между opencv и skimage при чтении файлов PNG - PullRequest
1 голос
/ 03 октября 2019

Читая файлы изображений PNG, я проверил процесс ввода с использованием opencv и skimage и обнаружил, что форма входного изображения различна. Чем обусловлены эти различия, почему skimage генерирует четыре канала для файла PNG?

Вот сегмент кода

from skimage.io import imread
image = imread("C:\\Desktop\\test1.png")
import cv2
img = cv2.imread("C:\\Desktop\\test1.png")
print("skimage shape: ",image.shape)
print("cv2 shape: ",img.shape)

Вывод

skimage shape:  (247, 497, 4)
cv2 shape:  (247, 497, 3)

1 Ответ

5 голосов
/ 03 октября 2019

OpenCV imread() по умолчанию отбрасывает альфа-канал (4-й канал в BGRA). Если вы хотите сохранить его, вам нужно использовать IMREAD_UNCHANGED флаг:

IMREAD_UNCHANGED Python: cv.IMREAD_UNCHANGED

Если установлено, вернуть загруженное изображение как есть (с альфа-каналом, в противном случае оно обрезается).

Skimage's imread() не имеет такого поведения. Альфа-канал включается, если он существует:

. В третьем измерении сохраняются различные цветовые полосы / каналы, так что серым изображением является MxN, RGB-изображением MxNx3 и RGBA-изображением. MxNx4.

Как отмечается в комментариях, с параметрами по умолчанию OpenCV imread() всегда возвращает 3-канальные изображения с цветовым порядком BGR (см. IMREAD_COLOR). imread() Skimage использует порядок RGB (A) для цветных изображений и может возвращать одиночный канал ndarray для изображений в градациях серого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...