Search code examples
pythonopencvmatplotlibimage-processingimshow

Difference between plt.imshow and cv2.imshow?


Why is there a difference in the output image when calling the same image using plt.imshow & cv2.imshow()?

Here is my code:

import cv2
import numpy as np
from matplotlib import pyplot as plt

src=cv2.imread('fruits1.jpg') # Source image

plt.subplot(211),plt.imshow(src),plt.title('image')
plt.xticks([]),plt.yticks([])
plt.show()

cv2.imshow('image',src)
cv2.waitKey(0)
cv2.destroyWindow()

Here is the image from plt.imshow:

image output for plt.imshow

and the second one is the original image:

image output from cv2.show

Is there some modification required with the plt.imshow()?


Solution

  • Because OpenCV stores images in BGR order instead of RGB.

    Try plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))

    See here for an example.