How can one display an image using cv2 in Python

PythonOpencvMatplotlib

Python Problem Overview


I've been working with code to display frames from a movie. The bare bones of the code is as follows:

import cv2
import matplotlib.pyplot as plt

# Read single frame avi
cap = cv2.VideoCapture('singleFrame.avi')
rval, frame = cap.read()

# Attempt to display using cv2 (doesn't work)
cv2.namedWindow("Input")
cv2.imshow("Input", frame)

#Display image using matplotlib (Works)
b,g,r = cv2.split(frame)
frame_rgb = cv2.merge((r,g,b))
plt.imshow(frame_rgb)
plt.title('Matplotlib') #Give this plot a title, 
                        #so I know it's from matplotlib and not cv2
plt.show()

Because I can display the image using matplotlib, I know that I'm successfully reading it in.

I don't understand why my creation of a window and attempt to show an image using cv2 doesn't work. No cv2 window ever appears. Oddly though, if I create a second cv2 window, the 'input' window appears, but it is only a blank/white window.

What am I missing here?

Python Solutions


Solution 1 - Python

As far as I can see, you are doing it almost good. There is one thing missing:

cv2.imshow('image',img)
cv2.waitKey(0)

So probably your window appears but is closed very very fast.

Solution 2 - Python

you can follow following code

import cv2
# read image 
image = cv2.imread('path to your image')
# show the image, provide window name first
cv2.imshow('image window', image)
# add wait key. window waits until user presses a key
cv2.waitKey(0)
# and finally destroy/close all open windows
cv2.destroyAllWindows()

I think your job is done then

Solution 3 - Python

Since OpenCV reads images with BGR format, you'd convert it to RGB format before pass the image to pyplot

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('YOUR_FILEPATH')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(image)
plt.show()

Solution 4 - Python

While using Jupyter Notebook this one might come in handy

import cv2
import matplotlib.pyplot as plt

# reading image
image = cv2.imread("IMAGE_PATH")

# displaying image
plt.imshow(image)
plt.show()


Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1245262View Question on Stackoverflow
Solution 1 - Pythonphev8View Answer on Stackoverflow
Solution 2 - Pythonamruta patilView Answer on Stackoverflow
Solution 3 - Pythonsungjun parkView Answer on Stackoverflow
Solution 4 - PythonHemanth KolliparaView Answer on Stackoverflow