In which we optimize OpenCV on the BeagleBone Black.
If you have been paying attention to the BBB group on Google Groups, you may have discovered a lively thread on webcams [1]. As part of this thread, I have been working with Michael Darling to realize the best performance possible when using OpenCV to process an MJPG stream from a webcam on the BBB. OpenCV relies on libjpeg when loading the MJPG frames to OpenCV Mats, and libjpeg is not the fastest of jpeg libraries. However, there is another option - libjpeg-turbo [2].
While it is technically possible to compile OpenCV with libjpeg-turbo support on the BBB, you will have fewer issues and spend less time compiling if you use a cross compiler on a more powerful computer. Michael has written a guide to cross compiling OpenCV. Below you will find the guide as a webpage for online viewing or a pdf for download as well as the latest code to capture frames from a webcam and convert them to OpenCV Mats. The guide is currently a draft, and we would appreciate any feedback you can provide. Many thanks to Michael for taking the time to write this up.
Note: The code in the guide and the latest code are slightly different.
- -o is used to indicate which frames to convert to OpenCV Mats and requires an integer argument.
-o 1 will convert every frame
-o 2 will convert every 2nd (ever other) frame, and so on.
The default is 1.
- -p is similar to -o in the original framegrabber. However, it doesn't actually output anything. It just controls if any frames are to be converted.
- Captured count and processed count variables have been renamed and moved to the top.
- Formatting has been corrected.
- Setting of the Mat size now uses the width and height variables.
The guide will be updated to reflect these changes in a future release, but in the meantime, you will need to adjust the command line arguments specified in the guide, namely replace -o with -p.
Guide [DRAFT]
BBB_30fps.html
BBB_30fps.pdf (204.32 kb)
Code
framegrabberCV.c (19.77 kb)
[1] problems with webcams
[2] libjpeg-turbo