【问题标题】:the difference between opencv and skimage while reading PNG files读取PNG文件时opencv和skimage的区别
【发布时间】:2020-02-01 08:42:01
【问题描述】:

在读取PNG图像文件时,我同时使用opencvskimage测试了输入过程,发现输入图像的形状不同。是什么导致了这些差异,为什么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)

【问题讨论】:

    标签: opencv image-processing computer-vision scikit-image


    【解决方案1】:

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

    IMREAD_UNCHANGED Python:cv.IMREAD_UNCHANGED

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

    skimage's imread() 没有这种行为。包含 Alpha 通道(如果存在):

    不同的颜色波段/通道存储在三维中,因此灰度图像为 MxN,RGB 图像为 MxNx3,RGBA 图像为 MxNx4。

    如 cmets 中所述,使用默认选项 OpenCV 的 imread() 始终返回具有 BGR 颜色顺序的 3 通道图像(请参阅 IMREAD_COLOR)。 skimage 的imread() 对彩色图像使用 RGB(A) 顺序,并且可以为灰度图像返回单通道 ndarray。

    【讨论】:

    • 值得一提的是,opencv imread 默认情况下始终提供 3 通道 8 位图像,即使文件是单通道或 16 位。
    • 还要注意,这些包之间的色带顺序是交换的。
    猜你喜欢
    • 2019-11-24
    • 2018-08-28
    • 1970-01-01
    • 2016-02-16
    • 2017-03-02
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多