Recently I purchased a raspberry pi 4 to see how it performs basic computer vision tasks. I largely followed this guide on building opencv https://www.learnopencv.com/install-opencv-4-on-raspberry-pi/
However, in the guide there are several missing dependencies on a fresh version of raspbian buster. There are also some apparent errors in the CMakeLists.txt file which other users already discovered. After patching these fixes and adding the needed missing dependencies, I now have opencv running on my pi. Here’s my complete script below.
IMPORTANT: You must READ the script, don’t just run it! For example, you should check the version of python you have at the time you run this script. When I ran it i was at python 3.7. Also, feel free to bump to a later version (or master) of opencv.
Oh, also during the numpy step it hung and i was too lazy to look into it. It didn’t seem to affect my ability to use opencv – so i didn’t go back and dig. My bad.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | #!/bin/bash cvVersion = "4.1.1" pythonVersion = "3.7" opencvDirRoot = / home / pi / opencv sudo apt - get - y purge wolfram - engine sudo apt - get - y purge libreoffice * sudo apt - get - y clean sudo apt - get - y autoremove mkdir - p $opencvDirRoot cd $opencvDirRoot # Clean build directories rm - rf opencv / build rm - rf opencv_contrib / build # Create directory for installation rm - fr installation mkdir - p installation mkdir installation / OpenCV - "$cvVersion" sudo apt - y update sudo apt - y upgrade sudo apt - get - y remove x264 libx264 - dev ## Install dependencies sudo apt - get install libblas - dev liblapack - dev sudo apt - get install libeigen3 - dev sudo apt - get - y install qtbase5 - dev qtdeclarative5 - dev sudo apt - get - y install build - essential checkinstall cmake pkg - config yasm sudo apt - get - y install git gfortran sudo apt - get - y install libjpeg8 - dev libjasper - dev libpng12 - dev sudo apt - get - y install libtiff5 - dev sudo apt - get - y install libtiff - dev sudo apt - get - y install libavcodec - dev libavformat - dev libswscale - dev libdc1394 - 22 - dev sudo apt - get - y install libxine2 - dev libv4l - dev cd / usr / include / linux sudo ln - s - f .. / libv4l1 - videodev.h videodev.h cd $opencvDirRoot sudo apt - get - y install libgstreamer0. 10 - dev libgstreamer - plugins - base0. 10 - dev sudo apt - get - y install libgtk2. 0 - dev libtbb - dev qt5 - default sudo apt - get - y install libatlas - base - dev sudo apt - get - y install libmp3lame - dev libtheora - dev sudo apt - get - y install libvorbis - dev libxvidcore - dev libx264 - dev sudo apt - get - y install libopencore - amrnb - dev libopencore - amrwb - dev sudo apt - get - y install libavresample - dev sudo apt - get - y install x264 v4l - utils sudo apt - get - y install libmesa - dev sudo apt - get - y install freeglut3 - dev # Optional dependencies sudo apt - get - y install libprotobuf - dev protobuf - compiler sudo apt - get - y install libgoogle - glog - dev libgflags - dev sudo apt - get - y install libgphoto2 - dev libeigen3 - dev libhdf5 - dev doxygen sudo apt - get - y install python3 - dev python3 - pip sudo - H pip3 install - U pip numpy sudo apt - get - y install python3 - testresources cd $opencvDirRoot # Install virtual environment python3 - m venv OpenCV - "$cvVersion" - py3 echo "# Virtual Environment Wrapper" >> ~ / .bashrc echo "alias workoncv-$cvVersion=\"source $opencvDirRoot/OpenCV-$cvVersion-py3/bin/activate\"" >> ~ / .bashrc source "$opencvDirRoot" / OpenCV - "$cvVersion" - py3 / bin / activate ############# ############ For Python 3 ############ # now install python libraries within this virtual environment sudo sed - i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=1024/g' / etc / dphys - swapfile sudo / etc / init.d / dphys - swapfile stop sudo / etc / init.d / dphys - swapfile start pip install numpy dlib # quit virtual environment deactivate git clone https: / / github.com / opencv / opencv.git cd opencv git checkout $cvVersion cd .. git clone https: / / github.com / opencv / opencv_contrib.git cd opencv_contrib git checkout $cvVersion cd .. cd opencv mkdir build cd build # Eigen/Core to eigen3/Eigen/Core sed - i s,Eigen / Core,eigen3 / Eigen / Core / g .. / modules / core / include / opencv2 / core / private.hpp # Add these to opencv/samples/cpp/CMakeLists.txt find_package(OpenGL REQUIRED) find_package(GLUT REQUIRED) cmake .. - D CMAKE_BUILD_TYPE = RELEASE \ - D CMAKE_INSTALL_PREFIX = $opencvDirRoot / installation / OpenCV - "$cvVersion" \ - D INSTALL_C_EXAMPLES = ON \ - D INSTALL_PYTHON_EXAMPLES = ON \ - D WITH_TBB = ON \ - D WITH_V4L = ON \ - D OPENCV_PYTHON3_INSTALL_PATH = $opencvDirRoot / OpenCV - $cvVersion - py3 / lib / python$pythonVersion / site - packages \ - D WITH_QT = ON \ - D WITH_OPENGL = ON \ - D OPENCV_EXTRA_EXE_LINKER_FLAGS = - latomic \ - D OPENCV_EXTRA_MODULES_PATH = .. / .. / opencv_contrib / modules \ - D BUILD_EXAMPLES = ON make - j$(nproc) make install sudo sed - i 's/CONF_SWAPSIZE=1024/CONF_SWAPSIZE=100/g' / etc / dphys - swapfile sudo / etc / init.d / dphys - swapfile stop sudo / etc / init.d / dphys - swapfile start echo "sudo modprobe bcm2835-v4l2" >> ~ / .profile |