我制作了一个非常简单的程序,它使用Raspberry pi相机捕获视频,在python中使用opencv。我使用Raspbian作为操作系统。 我已经使用opencv的2.4.5版本制作了一些程序,现在我已经安装了opencv 2.4.9。 我以前版本的opencv上运行的所有程序现在都不能正常工作,我想我发现这些程序给了我错误。 只是尝试启动以下代码:
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
resAcquisitionWidth = 160
resAcquisitionHeight = 120
cap.set(3, resAcquisitionWidth);
cap.set(4, resAcquisitionHeight);
cv2.namedWindow('frame')
i = 0
while(True):
print(i)
i = i + 1
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我收到错误
分段错误
我发现如果我运行相同的代码,但没有尝试调整分辨率(所以没有7-8行的cap.set()命令)一切正常。所以它应该是与此相关的东西。 我已经看过其他关于类似错误的帖子,所有这些似乎都是出于其他原因。 有谁知道什么是resasone?
答案 0 :(得分:4)
问题可能是 y0u 4re n0t c0d1ng s4f3ly :
cap = cv2.VideoCapture(0)
if not cap:
print "!!! Failed VideoCapture: unable to open device 0"
sys.exit(1)
当您调用cap
时,您对正在发生的事情的描述可被视为cap.set()
null 的证据,因此崩溃。当VideoCapture()
无法打开该设备时会发生这种情况。
这是什么意思?
0
(尝试其他数字); 然而,在与OP(提出问题的人)交换了一些消息之后,很明显崩溃的可能原因是相机不支持指定的分辨率。这就是检查API并了解函数返回的重要性的原因。这似乎只是 n0t c0d1ng s4f3ly 的另一种情况。
According to the docs,set()
返回true / false,具体取决于操作的成功/失败:
Python :cv.SetCaptureProperty(capture,property_id,value)→retval
确保测试这些调用的返回,并且如果set()
失败,请不要继续执行程序。