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

Chr*_*ris 9 python opencv numpy matplotlib

我得到的行为我不太明白:

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

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

有什么想法吗?

Saj*_*ngh 11

由于以下几个原因,它们不匹配:

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

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

pylab_img[::-1,:,::-1] == cv_img
Run Code Online (Sandbox Code Playgroud)