2012-06-13 67 views
8

Tôi muốn để có được những dòng video từ webcam của tôi sử dụng python và OpenCV, cho nhiệm vụ mà tôi đã triển khai mã đơn giản này:Webcam và OpenCV - python

import cv 

cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE) 
capture = cv.CaptureFromCAM(0) 

def repeat(): 
    frame = cv.QueryFrame(capture) 
    cv.ShowImage("w1", frame) 


while True: 
    repeat() 

khi tôi cố gắng để thực hiện nó, tôi nhận được lỗi sau:

[email protected]:~/Python$ python camera.py 
VIDIOC_QUERYMENU: Argumento inválido 
VIDIOC_QUERYMENU: Argumento inválido 
VIDIOC_QUERYMENU: Argumento inválido 

tôi đã thay đổi dòng sau theo đề nghị của bài viết khác:

capture = cv.CaptureFromCAM(0) 

tới:

capture = cv.CaptureFromCAM(-1) 

nhưng lỗi vẫn tồn tại.

+0

WaitKey là một phần quan trọng của OpenCV. nhiều người cảm thấy họ không cần phải chờ một phím tắt và bỏ qua nó, nhưng GUI sẽ không chạy mà không có nó và cửa sổ của bạn sẽ không bao giờ xuất hiện. – Octopus

Trả lời

21

Bạn cần thêm chức năng waitkey ở cuối.

Đoạn mã bên dưới hoạt động tốt cho tôi.

import cv 
cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE) 
capture = cv.CaptureFromCAM(0) 

def repeat(): 
    frame = cv.QueryFrame(capture) 
    cv.ShowImage("w1", frame) 

while True: 
    repeat() 
    if cv.WaitKey(33)==27: 
     break 

cv.DestroyAllWindows() 

Và nếu bạn không biết, OpenCV hiện tại sử dụng trăn mới api cv2 và có nhiều tính năng. Trong đó, cùng một mã được viết như sau:

import cv2 
import numpy as np 
c = cv2.VideoCapture(0) 

while(1): 
    _,f = c.read() 
    cv2.imshow('e2',f) 
    if cv2.waitKey(5)==27: 
     break 
cv2.destroyAllWindows() 
+0

Mã này không hoạt động đối với tôi. Tôi đang sử dụng python 2,7. Tôi vẫn gặp lỗi với đối số Không hợp lệ. – elaRosca

+0

dòng nào hiển thị lỗi cho bạn? –

+0

Điều này dường như không làm việc cho tôi hoặc là, có thể opencv đã thay đổi, có thể là python. dir (cv) cho thấy phương thức có tênWindow() không phải là NamedWindow() và VideoCapture dường như không phải là một phương thức ở bất kỳ đâu. – Mittenchops

1

Dưới đây đang làm việc cho python 2.7 và opencv có xây dựng cho python 2,7

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 

if not(cap.isOpened()): 
    cap.open() 

while(cap.isOpened()): 
    ret, frame = cap.read() 
    cv2.imshow('frame',frame) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

cap.release() 
cv2.destroyAllWindows()