Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

imread in pylab vs opencv: returning completely different array values

I'm getting behavior I don't quite understand:

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)

Both versions of imread read the same image into a numpy array of the same datatype, yet the values don't match. If the values were just mixed up I could chalk it up to the fact that opencv uses BGR whereas matplotlib (pylab) uses RGB, but that doesn't seem to account for this discrepancy.

Any thoughts?

like image 597
Chris Avatar asked Jul 19 '13 03:07

Chris


1 Answers

They don't match for a couple reasons:

  1. matplotlib reads the color values as RGB whereas OpenCV uses BGR
  2. The rows in matplotlib's array appear to list pixel rows from the bottom of the image to the top (don't ask me why), whereas OpenCV goes from top to bottom

Perhaps there is a nicer way of doing this, but if you wanted to match them, you would find:

pylab_img[::-1,:,::-1] == cv_img
like image 130
Sajjan Singh Avatar answered Nov 15 '22 21:11

Sajjan Singh