Python OpenCV – waitKey (0) no responde?

Estoy usando opencv 2.4.7 en ubuntu 12.04. Estoy progtwigndo con python y tengo un problema cuando ejecuto este script:

import cv2 img = cv2.imread('347620923614738322_233985812.jpg') cv2.namedWindow("window") cv2.imshow("window", img) cv2.waitKey(0) 

El problema es que el script no se detiene cuando cierro la imagen. Busqué información sobre waitKey y encontré que usar cv2.waitKey(0) es correcto.

No entiendo, ¿ dónde está el problema?

Este código me funciona desde 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() 

Espero que esto ayude a futuros lectores.

Descubrí que funciona si presiono la tecla mientras la ventana está enfocada. Si la línea de comando está enfocada, entonces no pasa nada

Agregar un cv2.waitKey (1) después de destruir la ventana debería funcionar en este caso.

 cv2.imshow('imgae',img) cv2.waitKey(0) cv2.destroyAllWindows() cv2.waitKey(1) 

Trate de ejecutar el script directamente desde la Terminal funciona al 100% para mí, pero no desde un IDE, por ejemplo , explico: estoy usando fedora 20 y tengo el mismo problema, copiando el primer ejemplo del tutorial oficial de opencv python, estoy utilizando :

  • Fedora 20 64bit
  • Spyder IDE para python
  • Python versión 2.7.5
  • Fedora de 64 bits
  • OpenCV 2.4.7

Aquí está el código para la prueba

 import cv2 img = cv2.imread('/path/image1.jpeg',0) cv2.imshow('Display',img) cv2.waitKey(0) cv2.destroyAllWindows() 

Al ejecutar este script con F5 desde Spyder, lo ejecuta con el terminal Python incrustado con esta línea:

 runfile('/home/user/Workspace/test.py', wdir=r'/home/user/Workspace') 

En este caso, cv2.waitKey (0) o cv2.waitKey (-1) no funcionan y las ventanas permanecen abiertas después de presionar las teclas con el código del ejemplo. Tratar de cerrar las ventanas tendrá como resultado “No responde, forzar la salida” “Alerta pero al ejecutar el script desde Terminal, funciona al 100%

no encontré el origen del problema, se actualizará si lo encuentro.

Aquí un código minimalista para el mejor rendimiento en todas las plataformas:

 import cv2 img = cv2.imread("image.jpg") cv2.imshow("Window", img) cv2.waitKey(0) cv2.destroyAllWindows() 

Y ahora algunas observaciones :

Cuando el usuario desea cerrar la ventana presionando la tecla 0 , debe asegurarse de que se presione la tecla 0 mientras la ventana está enfocada. Porque como se indicó anteriormente, si el terminal está enfocado, no ocurre nada y la ejecución del código se detiene en cv2.waitKey(0) hasta que se presiona correctamente la tecla 0 mientras la ventana está enfocada.

Presionar la tecla 0 mientras la ventana está enfocada es la forma correcta de cerrar la ventana y asegurarse de que , una vez que la ventana se destruye en la línea cv2.destroyAllWindows() y el progtwig finalice, el usuario puede recuperar el control del terminal .

Si se sale de la ventana haciendo clic con el mouse, la ventana se destruirá sí, pero el usuario terminará en la situación de no poder recuperar el control del terminal . En este tipo de situación, el usuario puede querer cerrar el terminal que no responde y abrir uno nuevo.

haga clic en la ventana de imagen (activa) y luego presione y la tecla, no escriba en la ventana del terminal.

cv2.waitKey (0) significa que la secuencia de comandos está en un bucle infinito con 0 milisegundos de espera después de que el bucle. Una clave especificada puede detenerlo.

No ha especificado el fin de la aplicación.

Pruebe este código: use otras teclas para la función waitKey () de opencv

Hay un problema con el sistema basado en Unix que ejecuta progtwigs opencv desde portátiles Python.

Verifique este método alternativo. Mi sugerencia es ejecutar el código en python en la terminal. No enfrentarás ningún tipo de problema.

Copie el mismo código y guárdelo con nombre_archivo.py

 import cv2 input = cv2.imread('path_to_image.png') cv2.imshow('Hello World', input) cv2.waitKey(0) cv2.destroyAllWindows() 

luego abrir directorio específico y luego abrir terminal

Pasos:

 Open Terminal cd path/to/filename.py source activate YOURPROFILE python filename.py 

Esto solucionará el problema.

https://youtu.be/8O-FW4Wm10s

Resuelto en Spyder en Ubuntu siguiendo [Ejecutar] -> [Configuración por archivo] -> [Ejecutar en una terminal del sistema externo].