读取PNG文件时opencv和skimage之间的区别

use*_*609 1 opencv image-processing computer-vision scikit-image

在读取PNG图像文件时,我同时使用opencvskimage和来测试输入过程,发现输入图像的形状不同。是什么原因导致这些差异,为什么要skimagePNG文件生成四个通道?

这是代码段

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)
Run Code Online (Sandbox Code Playgroud)

输出是

skimage shape:  (247, 497, 4)
cv2 shape:  (247, 497, 3)
Run Code Online (Sandbox Code Playgroud)

seb*_*sth 5

OpenCV imread()默认会丢弃alpha通道(BGRA中的第4个通道)。如果要保留它,则需要使用IMREAD_UNCHANGED标志:

IMREAD_UNCHANGED Python:cv.IMREAD_UNCHANGED

如果设置,则按原样返回加载的图像(使用Alpha通道,否则将被裁剪)。

skimageimread()没有此行为。包含Alpha通道(如果存在):

在第三维度中存储不同的色带/通道,使得灰度图像为MxN,RGB图像MxNx3和RGBA图像MxNx4。

如注释中所述,在默认选项下,OpenCV imread()总是返回3个具有BGR颜色顺序的通道图像(请参阅参考资料IMREAD_COLOR)。skimage imread()对彩色图像使用RGB(A)顺序,并且可以为灰度图像返回单通道ndarray。