我在 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()