opencv.imshow will cause jupyter notebook crash

后端 未结 8 1451
借酒劲吻你
借酒劲吻你 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:25
    %matplotlib inline
    #The line above is necesary to show Matplotlib's plots inside a Jupyter Notebook
    
    import cv2
    from matplotlib import pyplot as plt
    
    #Import image
    image = cv2.imread("input_path")
    
    #Show the image with matplotlib
    plt.imshow(image)
    plt.show()
    
    0 讨论(0)
  • 2021-01-31 08:27
    image = cv2.imread(file_path)
    while True:
        # Press 'q' for exit
        exit_key = ord('q')
        if cv2.waitKey(exit_key) & 255 == exit_key:
            cv2.destroyAllWindows()
            break
        cv2.imshow('Image_title', image)
    
    0 讨论(0)
  • 2021-01-31 08:33

    I was having a similar problem, and could not come to a good solution with cv2.imshow() in the Jupyter Notebook. I followed this stackoverflow answer, just using matplotlib to display the image.

    import matplotlib.pyplot as plt
    # load image using cv2....and do processing.
    plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    # as opencv loads in BGR format by default, we want to show it in RGB.
    plt.show()
    
    0 讨论(0)
  • 2021-01-31 08:36

    The API documentation for cv2.waitKey() notes the following:

    This function is the only method in HighGUI that can fetch and handle events, so it needs to be called periodically for normal event processing unless HighGUI is used within an environment that takes care of event processing.

    So perhaps calling the function in an endless loop would make the window responsive? I haven't tested this, but maybe you would like to try the following:

    import cv2
    
    cvim2disp = cv2.imread('data/home.jpg')
    cv2.imshow('img', cvim2disp)
    while(True):
        k = cv2.waitKey(33)
        if k == -1:  # if no key was pressed, -1 is returned
            continue
        else:
            break
    cv2.destroyWindow('img')
    
    0 讨论(0)
  • 2021-01-31 08:38

    The new window that opens up from Jupyter uses the same kernel as notebook. Just add this below to the code and it would work fine.

    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    0 讨论(0)
  • 2021-01-31 08:39

    This will help you understand what is happening:

    import cv2
    cvim2disp = cv2.imread('data/home.jpg')
    cv2.imshow('HelloWorld', cvim2disp)
    cv2.waitKey(0) 
    cv2.destroyWindow('HelloWorld')
    

    waitKey(0) method is waiting for an input infinitely. When you see a frame of the corresponding image, do not try to close the image using close in top right corner.

    Instead press some key. waitkey method will take that as an input and it will return back a value. Further you can also check which key was pressed to close the frame.

    Additionally waitKey(33) will keep the frame active for 33 ms and then close it automatically.

    destroyWindow() will destroy the current frame if there. destroyAllWindows() will destroy all the frames currently present.

    This will solve.

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