Python opencv не получает видео с камеры - PullRequest
3 голосов
/ 16 сентября 2011

Я пытался использовать модуль SimpleCV ( www.simplecv.org ) для запуска распознавания изображений и манипулирования ими. К сожалению, мой входящий видео канал был довольно привередливым, и я не уверен, что я сделал не так. Просто используя некоторый основной пример кода:

import cvwindow = cv.NamedWindow("camera", 1)
capture = cv.CreateCameraCapture(0)
width = int(cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH)) 
height = int(cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT))

while 1:
    img = cv.QueryFrame(capture)
    cv.ShowImage("camera", img)
    k = cv.WaitKey(1)
    if(k == 102):
        cv.destroyWindow("camera")
        break

Что отлично работает, когда я подключаю свою Logitech Webcam 500. Однако, когда я пытаюсь использовать камеру Vimicro Altair, у меня появляется серый экран, и при сохранении в файл файл пуст.

Я также пытался использовать код SimpleCV, основываясь на их кулинарной книге в соответствии с:

mycam = Camera()
img = mycam.getImage()

, который был в равной степени неудачным, однако вместо того, чтобы не возвращать данные, просто возвращал изображение, которое было полностью черным.

Я в растерянности, что является причиной этого, я попробовал точно такую ​​же систему на своем ноутбуке, которая даже не смогла получить изображение с камеры Logitech. Я использую 64-разрядную версию Windows 7 с Python 2.7 и SimpleCV 1.1.

Спасибо

1 Ответ

5 голосов
/ 10 октября 2011

Я один из разработчиков SimpleCV. Похоже, вы пытаетесь использовать стандартную оболочку Python openCV.

То, что я рекомендую сделать, это просто запустить пример здесь: https://github.com/sightmachine/SimpleCV/blob/develop/SimpleCV/examples/display/simplecam.py

Или вот код:

import time, webbrowser
from SimpleCV import *

#create JPEG streamers
js = JpegStreamer(8080)
cam = Camera()

cam.getImage().save(js)
webbrowser.open("http://localhost:8080", 2)

while (1):
  i = cam.getImage()
  i.save(js)
  time.sleep(0.01) #yield to the webserver
...