使用opencv进行分段错误,在Raspberry上的python中

时间:2014-11-06 21:13:43

标签: python opencv segmentation-fault raspberry-pi raspbian

我制作了一个非常简单的程序,它使用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?

1 个答案:

答案 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(尝试其他数字);
  • 可能未安装相机(驱动程序问题)或未正确连接到您的设备;
  • OpenCV不支持相机。

然而,在与OP(提出问题的人)交换了一些消息之后,很明显崩溃的可能原因是相机不支持指定的分辨率。这就是检查API并了解函数返回的重要性的原因。这似乎只是 n0t c0d1ng s4f3ly 的另一种情况。

According to the docsset()返回true / false,具体取决于操作的成功/失败:

  

Python :cv.SetCaptureProperty(capture,property_id,value)→retval

确保测试这些调用的返回,并且如果set()失败,请不要继续执行程序。