Optical Flow with OpenCV

From JoBaPedia
Jump to navigation Jump to search

Optical Flow

Optical flow calculations on OpenSuse 15.2

Resources

Install

To test python examples from the git repo directory learnopencv/Optical-Flow-in-OpenCV in a conda environment is easy

git clone https://github.com/spmallick/learnopencv.git
cd learnopencv/Optical-Flow-in-OpenCV/
conda create -n optical-flow python=3.8
conda activate optical-flow
pip install -r reqirements.txt

To run the c++ examples is a bit more involved. The Opensuse packages of opencv do not include all prerequisites and you get an error:

fatal error: opencv2/optflow.hpp: No such file or directory

To get rid of this, use a self compiled version of opencv with contrib part. It needs up to 2GB RAM per (c)make core, so I limited it to 4 cores. It chokes if it finds a python2, so I had to temporarily rename python2 stuff

for f in /usr/lib64/no-libpython2.7.so /usr/lib64/no-python2.7 /usr/bin/no-python2 /usr/bin/no-python2.7 /usr/bin/no-python2-config /usr/bin/no-python2.7-config
do 
  g=${f/no-/}; sudo mv $g $f
done
wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/master.zip
unzip opencv.zip
unzip opencv_contrib.zip
mkdir -p build && cd build
cmake -DPYTHON3_EXECUTABLE=/home/joachim/miniconda3/envs/Optical-Flow-in-OpenCV/bin/python -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-master/modules ../opencv-master
cmake --build . --parallel 4
make install

Restore python2 stuff

for f in /usr/lib64/no-libpython2.7.so /usr/lib64/no-python2.7 /usr/bin/no-python2 /usr/bin/no-python2.7 /usr/bin/no-python2-config /usr/bin/no-python2.7-config
do 
  g=${f/no-/}; sudo mv $f $g
done

Now compile the sample code

cd algorithms
cmake .
make -j4

Execute Examples

Just paste the example commands from the git repo readme, e.g.:

python3 demo.py --algorithm lucaskanade --video_path videos/car.mp4

This will show 2 windows, one with an example video and one with the flow information

For the c++ installation, this would be the equivalent command:

./OpticalFlow ../videos/car.mp4 lucaskanade