2012-07-05 92 views
5

Tôi đang sử dụng đoạn mã sau để truy cập vào webcam của tôi sử dụng OpenCV + python ...Vấn đề sử dụng webcam trong python + OpenCV

import cv 

cv.NamedWindow('webcam_feed', cv.CV_WINDOW_AUTOSIZE) 

cam = cv.CaptureFromCAM(-1) 

Tôi sau đó nhận được lỗi sau đây trong giao diện điều khiển ...

VIDIOC_QUERYMENU: Invalid argument 
VIDIOC_QUERYMENU: Invalid argument 
VIDIOC_QUERYMENU: Invalid argument 

tôi ban đầu được sử dụng,

cv.CaptureFromCAM(0) 

để truy cập giống nhau và có cùng một vấn đề và sử dụng -1 vì nó là suppos e để nhận bất kỳ webcam nào.

Tôi cũng đã kiểm tra xem liệu Ubuntu có nhận ra webcam hay không. Tôi đang sử dụng v4l2 cho webcam.

{} EDIT

Tôi đang sử dụng đoạn mã sau để hiển thị một cấp dữ liệu video, nó dường như chỉ được hiển thị chỉ là một hình ảnh web cam chụp thay vì một cấp dữ liệu video liên tục ...

import cv 
cv.NamedWindow('webcam_feed', cv.CV_WINDOW_AUTOSIZE) 
cam = cv.CaptureFromCAM(-1) 
feed = cv.QueryFrame(cam) 
cv.ShowImage("webcam_feed", feed) 
cv.WaitKey(-1) 
+0

Tôi gặp lỗi tương tự, nhưng nó hoạt động tốt. Tôi nhận được đầu ra hình ảnh thích hợp từ webcam. Webcam của bạn có hoạt động bình thường không? Bạn có nhận được hình ảnh phù hợp không? – Froyo

+0

Tương tự với tôi. Nhưng như Froyo đã đề cập, nó hoạt động tốt và có được hình ảnh thích hợp. Bạn hiểu không? –

+0

Được rồi nó hiển thị trong cửa sổ tôi tạo ... Nhưng một vấn đề mới đã xảy ra, hãy xem các chỉnh sửa tôi đã thực hiện cho bài đăng gốc ... –

Trả lời

0

tôi tin rằng bạn cần phải đặt

frame = cv.QueryFrame(cam) 
cv.ShowImage("Webcam Feed", frame) 

trong một vòng lặp để liên tục cập nhật những hình ảnh hiển thị trong cửa sổ. Tức là, khung hình từ cv.QueryFrame là hình ảnh tĩnh, không phải là video liên tục.

Nếu bạn muốn có thể thoát bằng một lần nhấn phím, hãy kiểm tra cv.WaitKey với thời gian chờ nhỏ trong vòng lặp quá.

+0

Cảm ơn bạn, tôi thực sự chỉ tìm ra sau khi đào qua một số ví dụ ... Tôi thực sự đánh giá cao phản ứng. –

1

WOW, đã trả lời câu hỏi của riêng tôi sau 15 khi tôi đăng bài này. Tôi đã thực hiện một số nghiên cứu và lý do cho web cam chỉ lấy một hình ảnh là do ...

cv.WaitKey(-1) 

Điều này không cho phép nội dung của cửa sổ làm mới. Tôi đặt số điện thoại thành 10 ...

cv.WaitKey(10) 

và nó hoạt động tốt. Tôi cũng đã thử 100, nhưng thấy không có sự khác biệt. Tôi chỉ thấy một sự khác biệt khi số lượng là 1000. Tôi sử dụng 1 vì dường như nó chạy mượt mà nhất.

Dưới đây là toàn bộ mã để hiển thị một cấp dữ liệu web cam

import cv 

cv.NamedWindow("webcam", 1) 

cam = cv.CaptureFromCAM(-1) 

While True: 
feed = cv.QueryFrame(cam) 
cv.ShowImage("webcam", feed) 
cv.WaitKey(1) 
+0

nó có thể được rằng bạn cần 2 dòng dưới đây trong khi khối thụt vào? cv.WaitKey chờ bạn bấm một phím – luismesas

+0

Điều này dường như không khắc phục được sự in của 'VIDIOC_QUERYMENU: Đối số không hợp lệ'. Bạn có khắc phục điều đó cuối cùng không? – elaRosca

0

Đối với tôi, các lệnh trong thư mục gốc

xhost +

tiết kiệm thời gian của tôi, Lưu ý để đóng và mở ga mới .

Hẹn gặp bạn.

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