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:返回完全不同的数组值的主要内容,如果未能解决你的问题,请参考以下文章