OpenCV Python:QueryFrame返回无

OpenCV Python:QueryFrame返回无,python,macos,opencv,camera,Python,Macos,Opencv,Camera,我在macbook上使用OpenCV 2.4和python 2.7.5。我想用以下代码显示内置摄像头的实时流: import cv cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE) camera_index = 0 capture = cv.CaptureFromCAM(camera_index) def repeat(): global capture #declare as globals since we are assigning to

我在macbook上使用OpenCV 2.4和python 2.7.5。我想用以下代码显示内置摄像头的实时流:

import cv

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

def repeat():
    global capture #declare as globals since we are assigning to them now
    global camera_index
    frame = cv.QueryFrame(capture)
    print type(frame)
    #cv.ShowImage("w1", frame)
    c = cv.WaitKey(10)
while True:
    repeat()
然而,QueryFrame似乎并不总是返回iplimage,以下是我在终端上得到的信息:

<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'cv2.cv.iplimage'>
<type 'NoneType'>
<type 'NoneType'>
<type 'cv2.cv.iplimage'>
<type 'NoneType'>
<type 'NoneType'>
<type 'NoneType'>
<type 'cv2.cv.iplimage'>
<type 'NoneType'>
<type 'NoneType'>
<type 'cv2.cv.iplimage'>
<type 'NoneType'>

建议如下:

  • 摄影机索引=-1
  • 放下第一帧以防万一

    firstImage=copy.deepcopy(cv.QueryFrame(捕获))

共享我的代码供您参考:

import cv2 as cv
import copy
camera_index = -1 

capture = cv.CaptureFromCAM(camera_index)

isRunning = True
firstImage = copy.deepcopy(cv.QueryFrame(capture)) #drop first frame which might empty
cv.NamedWindow("Webcam",  cv.CV_WINDOW_AUTOSIZE);

def repeat():
    global capture #declare as globals since we are assigning to them now
    global camera_index
    global isRunning
    global firstImage
    currImage = cv.QueryFrame(capture) 
    cv.ShowImage("Webcam",currImage)
    c = cv.WaitKey(10)
    if(c==27):
            isRunning = False
    if (c!=-1):
            print str(c)

while isRunning:
    repeat()

旧的cv api正在逐步淘汰,您将无法在下一个版本中使用它,因此请转到cv2!
import cv2 as cv
import copy
camera_index = -1 

capture = cv.CaptureFromCAM(camera_index)

isRunning = True
firstImage = copy.deepcopy(cv.QueryFrame(capture)) #drop first frame which might empty
cv.NamedWindow("Webcam",  cv.CV_WINDOW_AUTOSIZE);

def repeat():
    global capture #declare as globals since we are assigning to them now
    global camera_index
    global isRunning
    global firstImage
    currImage = cv.QueryFrame(capture) 
    cv.ShowImage("Webcam",currImage)
    c = cv.WaitKey(10)
    if(c==27):
            isRunning = False
    if (c!=-1):
            print str(c)

while isRunning:
    repeat()