opencv.imshow will cause jupyter notebook crash

后端 未结 8 1452
借酒劲吻你
借酒劲吻你 2021-01-31 07:46

I check other question on google or stackoverflow, they are talking about run cv2.imshow in script, but my code run in jupyter notebook.

Here is my configuration:

<
相关标签:
8条回答
  • 2021-01-31 08:44

    I am not sure if you can open a window from Jupyter Notebook. cv2.imshow expects a waitKey which doesn't work in Jupyter.

    Here is what I have done (using OpenCV 3.3):

    from IPython.display import display, HTML
    import cv2
    import base64
    
    def imshow(name, imageArray):
         _, png = cv2.imencode('.png', imageArray)
         encoded = base64.b64encode(png)
         return HTML(data='''<img alt="{0}" src="data:image/png;base64, {1}"/>'''.format(name, encoded.decode('ascii')))
    
    img = cv2.imread('./media/baboon.jpg',cv2.IMREAD_COLOR)
    imshow('baboon', img)
    

    If you don't need to use cv2, just:

    from IPython.display import Image
    Image('./media/baboon.jpg')
    
    0 讨论(0)
  • 2021-01-31 08:48

    The following code works fine in Jupyter to show one image

    %matplotlib inline
    import cv2
    from matplotlib import pyplot as plt
    cap = cv2.VideoCapture(videoFName)
    ret, image = cap.read()
    image=cv2.resize(image,None,fx=0.25,fy=0.25,interpolation=cv2.INTER_AREA)
    plt.imshow(image)
    plt.show()
    

    If you want to show the video instead of an image in a separate window, use the following code:

    import cv2
    cap = cv2.VideoCapture(videoFName)
    while cap.isOpened():
        ret, image = cap.read()
        image=cv2.resize(image,None,fx=0.25,fy=0.25,interpolation=cv2.INTER_AREA)
        cv2.imshow('image',image)
    
        k = cv2.waitKey(30) & 0xff # press ESC to exit
        if k == 27 or cv2.getWindowProperty('image', 0)<0:
            break
    cv2.destroyAllWindows()
    cap.release()
    

    Make sure the window name match, otherwise it will not work. In this case I use 'image' as window name.

    0 讨论(0)
提交回复
热议问题