Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Segmentation fault with opencv, in python on Raspberry

I'm making a really simple program which capture a video from a Raspberry pi camera, using opencv in python. I'm using Raspbian as OS. I've already made a few programs with the version 2.4.5 of opencv and now i've installed opencv 2.4.9. All the programs that i used to run on the previous version of opencv are not working now, and i think i found the point in which the programs gives me errors. Just trying to launch the following code:

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

i get the error

Segmentation fault

I found out that if i run the same code, but without trying to adjust the resolution (so without the cap.set() commands on the lines 7-8) everything works fine. So it should be something related with that. I've already seen other posts about similar errors, and all of those seem to come for other reasons. Anybody know what the resasone could be ?

like image 426
giogix Avatar asked Nov 06 '14 21:11

giogix


People also ask

Can I run OpenCV on Raspberry Pi?

Testing OpenCV on your Raspberry Pi Launch into the Python terminal by running the command below. 2. While we are within Python, we can now import the OpenCV Python module using the command below. By importing the module, we can first check to see if OpenCV will even load on our Pi.

Does Python have segmentation fault?

Note: On some platforms (e.g., supercomputers) the support for Python's visualization libraries such as matplotlib and seaborn may be weak. In particular, import matplotlib is known to cause a segmentation fault error on some platforms, which subsequently leads to the crash of the active Python session.


1 Answers

The problem might be that y0u 4re n0t c0d1ng s4f3ly:

cap = cv2.VideoCapture(0)
if not cap:
    print "!!! Failed VideoCapture: unable to open device 0"
    sys.exit(1)

You description of what's going on can be seen as evidence that cap is null when cap.set() is called, hence the crash. This happens when VideoCapture() is unable to open that device.

What does this mean?

  • The camera is not device 0 (try other numbers);
  • The camera might not be installed (driver issue) or connected properly to your device;
  • The camera is not supported by OpenCV.

However, after exchanging a few messages with the OP (person that asked the question), it became clear that the probable cause of the crash is the camera not supporting the specified resolution. That's why is so important to check the API and be aware of the return of the functions. This really seems to be just another case of n0t c0d1ng s4f3ly.

According to the docs, set() returns true/false depending on the success/failure of the operation:

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

Make sure to test the return of these calls, and do not let the execution of the program continue if set() fails.

like image 154
karlphillip Avatar answered Sep 27 '22 20:09

karlphillip