2013-12-12 12 views
12

Używam opencv 2.4.7 na Ubuntu 12.04. Jestem programowania z Pythona i mam problem, kiedy uruchomić ten skrypt:Python OpenCv. WaitKey nie odpowiada?

import cv2 

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

Problem polega na tym, że skrypt nie kończy, kiedy zamknąć obraz. Szukałem informacji o waitKey i odkryłem, że używanie cv2.waitKey(0) jest poprawne. Nie rozumiem, gdzie jest problem?

+1

"Skrypt nie przestawaj" - co masz na myśli? powinien się zatrzymać, jeśli naciśniesz klawisz (ale prawdopodobnie nie po kliknięciu przycisku "zamknij"). – berak

+0

Naciskam klawisz i skrypt się nie zatrzymuje. – Dhorka

+0

Czy zamknąłeś okno, a następnie nacisnąłeś klawisz? A może nacisnąłeś klawisz, gdy okno było otwarte? –

Odpowiedz

2

Ten kod działa dla mnie z 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() 

Nadzieja pomaga to dla przyszłych czytelników.

+1

Jeśli jesteś użytkownikiem Maca, podążaj za odpowiedzią Teng Long i dodaj 'cv2.waitKey (1)' po 'cv2.destroyAllWindows()' – wwood

+0

cv2.destroyAllWindows() działał poprawnie. Dziękuję za Twoją odpowiedź. –

1

Spróbuj wykonać skrypt bezpośrednio z terminalu działa w 100% dla mnie ale nie od IDE na przykład, wyjaśniam: Używam Fedory 20 i mam ten sam problem, kopiując pierwszy przykład z oficjalnej tutorialu OpenCV python, używam:

  • Fedorę 20 64bit
  • Spyder IDE dla Pythona
  • Python Version 2.7.5
  • Fedora 64 bit
  • OpenCV 2.4.7

Oto kod do testu

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

Po uruchomieniu tego skryptu za pomocą klawisza F5 od Spydera, uruchamia go za pomocą wbudowanego terminala python z tą linią:

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

W tym przypadku cv2.waitKey (0) lub cv2.waitKey (-1) nie działają, a okna pozostają otwarte po naciśnięciu klawiszy z kodem przykładu Próba zamknięcia okien spowoduje "Brak odpowiedzi" , Force Quit”Alert Ale podczas wykonywania skryptu od terminalu, działa 100%

nie znalazł źródło problemu, będziemy aktualizować gdybym go znaleźć.

18

Znalazłem, że działa, gdy naciskam klawisz, gdy okno jest ostre. Jeśli linia poleceń jest aktywna, nic się nie dzieje:

+0

To na pewno działa ... kiedy uruchamiasz program z wiersza poleceń – Apricot

5

Dodanie cv2.waitKey (1) po zniszczeniu okna powinno działać w tym przypadku.

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

Dzięki temu rozwiązałeś mój problem na MAC – Megha

+0

Uratowałeś mój dzień! Dziękuję bardzo! – wwood

0

Występuje problem z systemem opartym na systemie Unix z uruchomionymi programami OpenCV z Pythona.

Sprawdź tę alternatywną metodę Moja sugestia polega na uruchomieniu kodu w pythonie na terminalu. Nie zmierzy jakiegokolwiek problemu

Kopiuj ten sam kod i zapisać z filename.py

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

otwórz konkretnego katalogu, a następnie otworzyć zacisk

kroki:

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

To rozwiąże problem

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