我在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'>
有人知道问题的来源吗?
谢谢
编辑: 我注意到我的相机开启前需要几秒钟,所以在进入“while”之前我放了一些延迟。至于noneType问题,我不知道为什么每3帧我得到一个正确的图像。但是我只是通过设置条件检查我们是否得到正确的图像来“修复”它,这里是代码:
import cv
cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
camera_index = 0
capture = cv.CaptureFromCAM(camera_index)
c = cv.WaitKey(5000)
def repeat():
global capture #declare as globals since we are assigning to them now
global camera_index
frame = cv.QueryFrame(capture)
if frame:
cv.ShowImage("w1", frame)
c = cv.WaitKey(10)
while True:
repeat()
答案 0 :(得分:1)
建议如下:
放弃第一帧以防万一
firstImage = copy.deepcopy(cv.QueryFrame(capture))
分享我的代码供您参考:
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()