2013-12-12 18 views
12

Tôi đang sử dụng opencv 2.4.7 trên ubuntu 12.04. Tôi đang lập trình với python và tôi gặp sự cố khi tôi chạy tập lệnh này:Opencv python. WaitKey không trả lời?

import cv2 

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

Vấn đề là tập lệnh không dừng khi tôi đóng hình ảnh. Tôi đã tìm kiếm thông tin về waitKey và tôi thấy rằng việc sử dụng cv2.waitKey(0) là chính xác. Tôi không hiểu vấn đề ở đâu?

+1

"tập lệnh không dừng" - ý bạn là gì? nó sẽ dừng lại, nếu bạn bấm một phím (nhưng có lẽ không phải khi bạn nhấp vào nút 'đóng') – berak

+0

Tôi nhấn một phím và tập lệnh không dừng – Dhorka

+0

Bạn đã đóng cửa sổ rồi nhấn một phím? Hay bạn đã bấm phím trong khi cửa sổ đang mở? –

Trả lời

2

Mã này làm việc cho tôi từ 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 cho độc giả trong tương lai.

+1

Nếu bạn là người dùng Mac, hãy làm theo câu trả lời của Teng Long và thêm 'cv2.waitKey (1)' sau 'cv2.destroyAllWindows()' – wwood

+0

cv2.destroyAllWindows() hoạt động tốt. Cảm ơn bạn vì câu trả lời. –

0

cv2.waitKey (0) có nghĩa là tập lệnh nằm trong vòng lặp vô hạn với 0 miliseconds chờ sau vòng lặp .chỉ khóa được chỉ định có thể dừng nó.

bạn không chỉ định điều kiện ứng dụng kết thúc.

Hãy thử mã này: Using other keys for the waitKey() function of opencv

1

Cố gắng thực thi kịch bản trực tiếp từ Terminal hoạt động 100% cho tôi nhưng không phải từ một IDE ví dụ, tôi giải thích: Tôi đang sử dụng fedora 20 và có cùng một vấn đề, sao chép ví dụ đầu tiên từ chính thức hướng dẫn opencv python, tôi đang sử dụng:

  • Fedora 20 64bit
  • Spyder IDE cho python
  • Python Version 2.7.5
  • Fedora 64 bit
  • OpenCV 2.4.7

Đây là mã cho thử nghiệm

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

Khi chạy kịch bản này sử dụng F5 từ Spyder, nó chạy nó bằng cách sử dụng thiết bị đầu cuối python nhúng với dòng này:

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

Trong trường hợp này, cv2.waitKey (0) hoặc cv2.waitKey (-1) không hoạt động và cửa sổ vẫn mở sau khi nhấn phím có mã ví dụ Cố gắng đóng cửa sổ sẽ dẫn đến "Không phản hồi , Buộc phải thoát "Alert Nhưng khi thực thi tập lệnh từ Thiết bị đầu cuối, nó hoạt động 100%

không tìm thấy nguồn gốc vấn đề, sẽ cập nhật nếu tôi tìm thấy.

18

Tôi thấy rằng nó hoạt động nếu tôi nhấn phím trong khi cửa sổ đang được lấy nét. Nếu dòng lệnh nằm trong tiêu điểm thì không có gì xảy ra

+0

Điều này chắc chắn hoạt động ... khi u chạy chương trình từ dòng lệnh nhắc – Apricot

5

Thêm cv2.waitKey (1) sau khi bạn hủy cửa sổ sẽ hoạt động trong trường hợp này.

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

Cảm ơn nó đã giải quyết được sự cố của tôi trên MAC – Megha

+0

Bạn đã lưu ngày của tôi! Cảm ơn bạn rất nhiều! – wwood

0

Có vấn đề với hệ thống dựa trên Unix chạy chương trình opencv từ sổ tay python.

Kiểm tra phương pháp thay thế này Đề xuất của tôi là chạy mã trong python trong terminal. Bạn sẽ không gặp phải bất kỳ loại vấn đề

Sao chép cùng mã và lưu với filename.py

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

sau đó mở thư mục cụ thể và sau đó mở terminal

bước:

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

Điều này sẽ giải quyết vấn đề

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

Các vấn đề liên quan