Tutorial Videos and Webcams

From BoofCV
Revision as of 03:12, 8 February 2012 by Peter (talk | contribs) (Created video page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Videos and Webcams in BoofCV

BoofCV focuses on image processing and computer vision algorithms and for the most part relies on other libraries for input and output. For example, BoofCV does not define image widgets but uses Swing instead. The same philosophy applies to capturing images from videos and webcams. Unfortunately the built in support that Java provides for reading videos and webcams is very limited.

The limited support that BoofCV provides itself for reading videos directly comes in the form of MJPEG videos and image sequence. MJPEG is a very simple video format that encapsulates a sequence of video images. MJPEG is not the most efficient format, but it is very easy to read and write. Its inclusion into BoofCV is primarily to provide video support to applets. An image sequence contained in a directly can also be read as if it was a video.

Third party libraries are required for reading webcams. Better support for integrating 3rd party libraries is still being worked on. There are currently no plans for providing support out of the box. The reason for this is that these 3rd party libraries often require compiling native code and configuring Java to reference the native libraries. Integrating such libraries into BoofCV by default would greatly increase its complexity.

Quick and Dirty

As previously mentioned BoofCV has only very limited support for videos. Let's say that you want to play your own video in one of BoofCV's examples. Because BoofCV by default only support MJPEG you need to convert your file into an MJPEG. This can be done by converting it into a sequence of jpeg images and then using the CreateMJpeg in BoofCV to create the MJPEG or using ffmpeg.

The easiest way in Linux to create an MJPEG from some other video format is using ffmpeg. Below is a command line example.

ffmpeg -i FILENAME -sameq example.mjpeg

Other flags can be added to resize the image or adjust image quality. There are a few videos where ffmpeg will produce an MJPEG which BoofCV cannot read, but this is not comon.

Third Party Options

The easiest way to integrate a 3rd party library with BoofCV is to read in a frame as a BufferedImage then convert it into a native BoofCV image format using ConvertBufferedImage. An alternative is to write a wrapper that implements SimpleImageSequence, which is used by several examples.

Video Libraries

Webcams

If you know of some other options please post a message to BoofCV's message board (see sidebar link) letting us know about it! Especially if you have suggestions for Windows and MacOS.