pylab vs opencv中的imread:返回完全不同的数组值

Posted

技术标签:

【中文标题】pylab vs opencv中的imread:返回完全不同的数组值【英文标题】:imread in pylab vs opencv: returning completely different array values 【发布时间】:2013-07-18 05:40:00 【问题描述】:

我的行为我不太明白:

In [1]: import cv2

In [2]: pylab_img=pylab.imread('lena.jpg')

In [3]: cv_img=cv2.imread('lena.jpg')

In [4]: pylab_img[200,200,:]
Out[4]: array([228, 197, 176], dtype=uint8)

In [5]: cv_img[200,200,:]
Out[5]: array([ 84,  48, 132], dtype=uint8)

imread 的两个版本都将相同的图像读取到相同数据类型的 numpy 数组中,但值不匹配。如果这些值只是混淆了,我可以将其归结为 opencv 使用 BGR 而 matplotlib (pylab) 使用 RGB,但这似乎并不能解释这种差异。

有什么想法吗?

【问题讨论】:

从 cv2 的 imread 获取结果并使用 pylab 的 imshow 查看结果,然后从 pylab 的 imread 获取结果并使用 cv2 的 imshow 查看它可能会提供信息。跨度> 有点相关:***.com/questions/1349230/… 【参考方案1】:

它们不匹配有几个原因:

    matplotlib 将颜色值读取为 RGB,而 OpenCV 使用 BGR matplotlib 数组中的行似乎列出了从图像底部到顶部的像素行(不要问我为什么),而 OpenCV 是从上到下的

也许有更好的方法可以做到这一点,但如果你想匹配它们,你会发现:

pylab_img[::-1,:,::-1] == cv_img

【讨论】:

以上是关于pylab vs opencv中的imread:返回完全不同的数组值的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV imread读取图片失败

OpenCV imread读取图片失败

opencv的img.flat的函数用法

VS2017+OpenCV3.4.0 折腾

基于 VS2019 配置 opencv4.x

OpenCV-Python中的函数cv.imread()读取到的图像的数据存储结构是怎样的?