I'm using opencv 2.4.7 on ubuntu 12.04. I'm programming with python and I have a problem when i run this script:
import cv2
img = cv2.imread('347620923614738322_233985812.jpg')
cv2.namedWindow("window")
cv2.imshow("window", img)
cv2.waitKey(0)
The problem is that the script doesn't stop when I close the image. I searched information about waitKey
and I found that using cv2.waitKey(0)
is correct.
I don't understand, where is the problem?
I found that it works if i press the key whilst the window is in focus. If the command line is in focus then nothing happens
Adding a cv2.waitKey(1) after you destroy the window should work in this case.
cv2.imshow('imgae',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)
This code works for me from IDLE:
# -*- coding: utf-8 -*-
# Objectif : découvrir le fonctionnement d'opencv-python
# http://opencv-python-tutroals.readthedocs.org/en/latest/index.html
import numpy as np
import cv2
# Load an color image in grayscale
img = cv2.imread('Lena.tiff',0)
WINDOW_NAME = 'Image de Lena'
cv2.namedWindow(WINDOW_NAME, cv2.CV_WINDOW_AUTOSIZE)
cv2.startWindowThread()
# Display an image
cv2.imshow(WINDOW_NAME,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Hope this helps for future readers.
单击图像窗口(活动)然后按 和 键,不要在终端窗口中写入。
Here a minimalistic code for best performance on all platforms:
import cv2
img = cv2.imread("image.jpg")
cv2.imshow("Window", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
And now some observations :
When the user wants to close the window through the press of the 0
key , he/she has to make sure that the 0
key is pressed whilst the window is in focus. Because as stated above, if the terminal is in focus nothing happens and code execution stucks at the cv2.waitKey(0)
until the 0
key is pressed properly whilst the window is in focus.
Pressing the 0
key whilst the window is in focus is the right way to close the window and make sure that , once the window is destroyed in line cv2.destroyAllWindows()
and the program ends, the user can get back the control of the terminal .
If the window is exited by mouse click, the window will be destroyed yes, but the user will very much end up in the situation of not being able to get back the control of the terminal . In this kind of situation the user may want to shut down the unresponsive terminal and open a new one.
Try to execute the script directly from the Terminal works 100% for me but not from an IDE for example , i explain : I'm using fedora 20 and got the same problem, copying the first example from official opencv python tutorial, i'm using :
Here is the code for test
import cv2
img = cv2.imread('/path/image1.jpeg',0)
cv2.imshow('Display',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
When running this script using F5 from Spyder, it runs it using the embedded python terminal with this line :
runfile('/home/user/Workspace/test.py', wdir=r'/home/user/Workspace')
In this instance, cv2.waitKey(0) or cv2.waitKey(-1) are not working and windows remains opened after pressing keys with the code of the example Trying to close the windows will result in a "Not Responding , Force to Quit" Alert But when executing the script from Terminal , it works 100%
didn't found the problem origin , will update if i find it.
在Ubuntu下的Spyder中按照【运行】->【按文件配置】->【在外部系统终端中执行】解决。
Well the use cv2.waitKeyEx(0).
It runs in the same way and waits for your response until you revoke it.
I hope it helps. Nithesh varmma
cv2.waitKey(0) means that script is in infinity loop with 0 miliseconds wait after loop .only specified key can stop it.
you did not specified end of app condition.
Try this code: Using other keys for the waitKey() function of opencv
There is a problem with unix based system running opencv programs from python notebooks.
Check this alternate method My suggestion is to run code in python in terminal. You will not face any kind of problem
Copy the same code and save with filename.py
import cv2
input = cv2.imread('path_to_image.png')
cv2.imshow('Hello World', input)
cv2.waitKey(0)
cv2.destroyAllWindows()
then open specific directory and then open terminal
Steps:
Open Terminal
cd path/to/filename.py
source activate YOURPROFILE
python filename.py
This will solve problem
This will work even if you close the window using the cross button on the window.
import numpy as np
import cv2
img = cv2.imread('arvid.jpg', 0)
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', img)
while True:
k = cv2.waitKey(30) & 0xFF
if k == 27: # wait for ESC key to exit
cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
cv2.imwrite('arvid2.jpg', img)
cv2.destroyAllWindows()
if cv2.getWindowProperty("image", 0) == -1:
break
This problem occurs in some earlier version of opencv. So you just need to update opencv to the latest version. Version 4.0.0.21
worked for me. Use the command below.
update opencv to version 4.0.0.21.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.