2013-07-19 31 views
6

我收到的行为我不太明白:imread在pylab VS OpenCV的:返回完全不同的数组值

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,但这似乎并没有解决这种差异。

有什么想法?

+1

从cv2的'imread'中得到结果并用pylab的'imshow'查看它可能是有用的,然后从pylab的'imread'中得到结果并用cv2的'imshow'查看它。 – bogatron

+0

SOme相关:http://stackoverflow.com/questions/1349230/matplotlib-coord-sys-origin-to-top-left – Bull

回答

9

他们不匹配的一对夫妇的原因:

  1. matplotlib读取颜色值RGB而OpenCV的使用BGR
  2. 在matplotlib的阵列中的行似乎从图像的底部列出像素行顶端(不要问我为什么),而来自OpenCV的顶部进入底部

或许有这样做的更好的方式,但如果你想匹配它们,你会发现:

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