OpenCV a Ubuntu 16.04
Salta a la navegació
Salta a la cerca
Instal.lació i configuració
He seguit aquest tutorial i ha funcionat correctament:
In this post, we will provide step by step instructions for installing OpenCV 3 (C++ and Python) on Ubuntu 16.04. Step 1: Update packages sudo apt-get update sudo apt-get upgrade Step 2: Install OS libraries Remove any previous installations of x264</h3> sudo apt-get remove x264 libx264-dev We will Install dependencies now sudo apt-get install build-essential checkinstall cmake pkg-config yasm sudo apt-get install git gfortran sudo apt-get install libjpeg8-dev libjasper-dev libpng12-dev # If you are using Ubuntu 14.04 sudo apt-get install libtiff4-dev # If you are using Ubuntu 16.04 sudo apt-get install libtiff5-dev sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev sudo apt-get install libxine2-dev libv4l-dev sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev sudo apt-get install qt5-default libgtk2.0-dev libtbb-dev sudo apt-get install libatlas-base-dev sudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev sudo apt-get install libvorbis-dev libxvidcore-dev sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get install x264 v4l-utils # Optional dependencies sudo apt-get install libprotobuf-dev protobuf-compiler sudo apt-get install libgoogle-glog-dev libgflags-dev sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen Step 3: Install Python libraries sudo apt-get install python-dev python-pip python3-dev python3-pip sudo -H pip2 install -U pip numpy sudo -H pip3 install -U pip numpy We will use Virtual Environment to install Python libraries. It is generally a good practice in order to separate your project environment and global environment. # Install virtual environment sudo pip2 install virtualenv virtualenvwrapper sudo pip3 install virtualenv virtualenvwrapper echo "# Virtual Environment Wrapper" >> ~/.bashrc echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc source ~/.bashrc ############ For Python 2 ############ # create virtual environment mkvirtualenv facecourse-py2 -p python2 workon facecourse-py2 # now install python libraries within this virtual environment pip install numpy scipy matplotlib scikit-image scikit-learn ipython # quit virtual environment deactivate ###################################### ############ For Python 3 ############ # create virtual environment mkvirtualenv facecourse-py3 -p python3 workon facecourse-py3 # now install python libraries within this virtual environment pip install numpy scipy matplotlib scikit-image scikit-learn ipython # quit virtual environment deactivate ###################################### Step 4: Download OpenCV and OpenCV_contrib We will download opencv and opencv_contrib packages from their GitHub repositories. Step 4.1: Download opencv from Github git clone https://github.com/opencv/opencv.git cd opencv git checkout 3.3.1 cd .. Step 4.2: Download opencv_contrib from Github git clone https://github.com/opencv/opencv_contrib.git cd opencv_contrib git checkout 3.3.1 cd .. Step 5: Compile and install OpenCV with contrib modules Step 5.1: Create a build directory cd opencv mkdir build cd build Step 5.2: Run CMake cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D WITH_TBB=ON \ -D WITH_V4L=ON \ -D WITH_QT=ON \ -D WITH_OPENGL=ON \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D BUILD_EXAMPLES=ON .. Step 5.3: Compile and Install # find out number of CPU cores in your machine nproc # substitute 4 by output of nproc make -j4 sudo make install sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf' sudo ldconfig Step 5.4: Create symlink in virtual environment Depending upon Python version you have, paths would be different. OpenCV’s Python binary (cv2.so) can be installed either in directory site-packages or dist-packages. Use the following command to find out the correct location on your machine. 1 find /usr/local/lib/ -type f -name "cv2*.so" It should output paths similar to one of these (or two in case OpenCV was compiled for both Python2 and Python3): ############ For Python 2 ############ ## binary installed in dist-packages /usr/local/lib/python2.6/dist-packages/cv2.so /usr/local/lib/python2.7/dist-packages/cv2.so ## binary installed in site-packages /usr/local/lib/python2.6/site-packages/cv2.so /usr/local/lib/python2.7/site-packages/cv2.so ############ For Python 3 ############ ## binary installed in dist-packages /usr/local/lib/python3.5/dist-packages/cv2.cpython-35m-x86_64-linux-gnu.so /usr/local/lib/python3.6/dist-packages/cv2.cpython-36m-x86_64-linux-gnu.so ## binary installed in site-packages /usr/local/lib/python3.5/site-packages/cv2.cpython-35m-x86_64-linux-gnu.so /usr/local/lib/python3.6/site-packages/cv2.cpython-36m-x86_64-linux-gnu.so Double check the exact path on your machine before running the following commands En el meu cas, em dóna: /usr/local/lib/python2.7/dist-packages/cv2.so /usr/local/lib/python3.5/dist-packages/cv2.cpython-35m-x86_64-linux-gnu.so ############ For Python 2 ############ cd ~/.virtualenvs/facecourse-py2/lib/python2.7/site-packages ln -s /usr/local/lib/python2.7/dist-packages/cv2.so cv2.so ############ For Python 3 ############ cd ~/.virtualenvs/facecourse-py3/lib/python3.6/site-packages ln -s /usr/local/lib/python3.6/dist-packages/cv2.cpython-36m-x86_64-linux-gnu.so cv2.so En el meu cas: cd ~/.virtualenvs/facecourse-py3/lib/python3.5/site-packages ln -s /usr/local/lib/python3.5/dist-packages/cv2.cpython-35m-x86_64-linux-gnu.so cv2.so Step 6: Test OpenCV3 We will test a red eye remover application written in OpenCV to test our C++ and Python installations. Download RedEyeRemover.zip and extract it into a folder. Step 6.1: Test C++ code Move inside extracted folder, compile and run. # compile # There are backticks ( ` ) around pkg-config command not single quotes g++ -std=c++11 removeRedEyes.cpp `pkg-config --libs --cflags opencv` -o removeRedEyes # run ./removeRedEyes Step 6.2: Test Python code Activate Python virtual environment ############ For Python 2 ############ workon facecourse-py2 ############ For Python 3 ############ workon facecourse-py3 Quick Check # open ipython (run this command on terminal) ipython # import cv2 and print version (run following commands in ipython) import cv2 print cv2.__version__ # If OpenCV3 is installed correctly, # above command should give output 3.3.1 # Press CTRL+D to exit ipython Run RedEyeRemover demo python removeRedEyes.py Now you can exit from Python virtual environment. deactivate Whenever you are going to run Python scripts which use OpenCV you should activate the virtual environment we created, using workon command.
1a prova
Com es comenta en l'article, la primera prova amb C++ és un petit script per treure els ulls vermells d'una foto:
removeRedEyes.cpp:
$ g++ -std=c++11 removeRedEyes.cpp `pkg-config --libs --cflags opencv` -o removeRedEyes $ ./removeRedEyes
/** Copyright 2017 by Satya Mallick ( Big Vision LLC ) http://www.learnopencv.com **/ #include <opencv2/opencv.hpp> using namespace std; using namespace cv; void fillHoles(Mat &mask) { /* This hole filling algorithm is decribed in this post https://www.learnopencv.com/filling-holes-in-an-image-using-opencv-python-c/ */ Mat maskFloodfill = mask.clone(); floodFill(maskFloodfill, cv::Point(0,0), Scalar(255)); Mat mask2; bitwise_not(maskFloodfill, mask2); mask = (mask2 | mask); } int main(int argc, char** argv ) { // Read image Mat img = imread("red_eyes2.jpg",CV_LOAD_IMAGE_COLOR); // Output image Mat imgOut = img.clone(); // Load HAAR cascade CascadeClassifier eyesCascade("haarcascade_eye.xml"); // Detect eyes std::vector<Rect> eyes; eyesCascade.detectMultiScale( img, eyes, 1.3, 4, 0 |CASCADE_SCALE_IMAGE, Size(100, 100) ); // For every detected eye for( size_t i = 0; i < eyes.size(); i++ ) { // Extract eye from the image. Mat eye = img(eyes[i]); // Split eye image into 3 channels. vector<Mat>bgr(3); split(eye,bgr); // Simple red eye detector Mat mask = (bgr[2] > 150) & (bgr[2] > ( bgr[1] + bgr[0] )); // Clean mask -- 1) File holes 2) Dilate (expand) mask fillHoles(mask); dilate(mask, mask, Mat(), Point(-1, -1), 3, 1, 1); // Calculate the mean channel by averaging // the green and blue channels Mat mean = (bgr[0]+bgr[1])/2; mean.copyTo(bgr[2], mask); mean.copyTo(bgr[0], mask); mean.copyTo(bgr[1], mask); // Merge channels Mat eyeOut; cv::merge(bgr,eyeOut); // Copy the fixed eye to the output image. eyeOut.copyTo(imgOut(eyes[i])); } // Display Result imshow("Red Eyes", img); imshow("Red Eyes Removed", imgOut); waitKey(0); }
creat per Joan Quintana Compte, desembre 2017