cv2.imshow() crashes Kernel

Viewed 18760

I am running OpenCV through Jupyter Notebooks and whenever I try to run cv2.imshow() the kernel crashes, no error message or helpful hint - just a plain

The Kernel appears to have died. It will restart automatically.

Here is the code I am running...

import cv2 
input = cv2.imread('images/input.jpg')
cv2.imshow('Hello World', input)
cv2.waitKey(0)
cv2.destroyAllWindows()

The code works (albeit differently) when I run the below...

%matplotlib inline
from matplotlib import pyplot as plt
import cv2
image = cv2.imread('images/input.jpg')
plt.imshow(image)
plt.show()

FYI I am using a completely unaltered copy of BitFusion on AWS.

https://aws.amazon.com/marketplace/pp/B01EYKBEQ0?ref=cns_srchrow

Any idea what could be going wrong?

3 Answers

To view images with cv2.imshow on AWS, you need to enable X11 forwarding so the graphics can be run on the server and displayed locally. This can be done by ssh-ing with the -Y option:

ssh -Y username@hostname

If the images are larger, you will also need to compress the data using -C:

ssh -Y -C username@hostname

The terminal used to ssh into AWS will need to be left open as long as you're displaying images from the notebook.

So for me, the issue was fixed by placing a while loop that ends when you press the key D on your keyboard

import cv2 as cv
img = cv2.imread('Images/1.jpg')
while True: 
    cv.imshow('ImageDisplay',img)
    if cv.waitKey(20) & 0xFF == ord('d'):
        break
cv.destroyAllWindows()
Related