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

gio*_*gix 6 python opencv segmentation-fault raspberry-pi raspbian

我正在制作一个非常简单的程序,它使用在Python中使用opencv从Raspberry pi相机中捕获视频.我正在使用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()
Run Code Online (Sandbox Code Playgroud)

我收到了错误

分段故障

我发现如果我运行相同的代码,但没有尝试调整分辨率(所以没有7-8行的cap.set()命令)一切正常.所以它应该是与此相关的东西.我已经看过其他关于类似错误的帖子,所有这些似乎都是出于其他原因.有人知道什么是resasone可能?

kar*_*lip 4

问题可能是y0u 4re n0t c0d1ng s4f3ly

\n\n
cap = cv2.VideoCapture(0)\nif not cap:\n    print "!!! Failed VideoCapture: unable to open device 0"\n    sys.exit(1)\n
Run Code Online (Sandbox Code Playgroud)\n\n

您对正在发生的情况的描述可以被视为调用时cap空的cap.set()证据,因此崩溃。VideoCapture()当无法打开该设备时会发生这种情况。

\n\n

这是什么意思?

\n\n
    \n
  • 相机不是设备0(尝试其他号码);
  • \n
  • 相机可能未安装(驱动程序问题)或未正确连接到您的设备;
  • \n
  • OpenCV 不支持该相机。
  • \n
\n\n

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

\n\n

根据 docsset()根据操作的成功/失败返回 true/false:

\n\n
\n

Python:cv.SetCaptureProperty(捕获,property_id,值)\xe2\x86\x92 retval

\n
\n\n

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

\n