我以前在Ubuntu 12.04.1上使用了OpenCV 2.4.5与某些配置和软件包,但在Ubuntu 12.04.2上升级到OpenCV 2.4.6.1有问题
我想分享一些想法(从SO,ubuntu.org,asklinux.org等许多来源收集到的值得注意的信息汇总,当然还有几个程序)
以下是最终让我通过的.
注意:确保卸载以前安装的OpenCV,FFMpeg和其他依赖项.
步骤1(安装ffmpeg和依赖项)
# goto http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/ # download the latest stable opencv such as 2.4.6.1 (http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.5/opencv-2.4.5.1.tar.gz/download) to current directory (such as home or ~/Document) # cd /opt # tar -xvf <path-to-download-folder>/OpenCV-2.4.6.1.tar.gz # cd OpenCV-2.4.6.1 # create a foler under current dir (following prevIoUs step,this should be <opencv-dir>),called prepare # cd prepare # Copy the following script to gedit and save as install.sh to current dir,this should be <opencv-dir>/prepare # Check corresponding url used in the script for latest versions of the package and replace as required # Open terminal and navigate to location used above # sudo chmod +x install.sh # ./install
echo "Removing any pre-installed ffmpeg,x264,and other dependencies (not all the prevIoUsly installed dependecies)" sudo apt-get remove ffmpeg x264 libx264-dev libvpx-dev librtmp0 librtmp-dev libopencv-dev sudo apt-get update arch=$(uname -m) if [ "$arch" == "i686" -o "$arch" == "i386" -o "$arch" == "i486" -o "$arch" == "i586" ]; then flag=0 else flag=1 fi echo "Installing Dependenices" sudo apt-get install autoconf automake make g++ curl cmake bzip2 python unzip \ build-essential checkinstall git git-core libass-dev libgpac-dev \ libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libx11-dev \ libxext-dev libxfixes-dev pkg-config texi2html zlib1g-dev echo "downloading yasm (assembler used by x264 and FFmpeg)" # use git or tarball (not both) wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz tar xzvf yasm-1.2.0.tar.gz cd yasm-1.2.0 echo "installing yasm" ./configure make sudo make install cd .. echo 'READ NOTE BELOW which was extracted from http://wiki.serviio.org/doku.PHP?id=build_ffmpeg_linux' echo 'New version of x264 contains by default support of OpenCL. If not installed or without sense (example Ubuntu 12.04LTS on VMWare) add to configure additional option --disable-opencl. Without this option ffmpeg could not be configured (ERROR: libx264 not found).' echo "downloading x264 (H.264 video encoder)" # use git or tarball (not both) # git clone http://repo.or.cz/r/x264.git or git clone git://git.videolan.org/x264.git cd x264 # wget ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20130801-2245-stable.tar.bz2 # tar -xvjf x264-snapshot-20130801-2245-stable.tar.bz2 # cd x264-snapshot-20130801-2245-stable/ echo "Installing x264" if [ $flag -eq 0 ]; then ./configure --enable-static --disable-opencl else ./configure --enable-shared --enable-pic --disable-opencl fi make sudo make install cd .. echo "downloading fdk-aac (AAC audio encoder)" # use git or tarball (not both) git clone --depth 1 git://github.com/mstorsjo/fdk-aac.git cd fdk-aac echo "installing fdk-aac" autoreconf -fiv ./configure --disable-shared make sudo make install cd .. echo "installing libmp3lame-dev (MP3 audio encoder.)" sudo apt-get install libmp3lame-dev echo "downloading libopus (Opus audio decoder and encoder.)" wget http://downloads.xiph.org/releases/opus/opus-1.0.3.tar.gz tar xzvf opus-1.0.3.tar.gz cd opus-1.0.3 echo "installing libopus" ./configure --disable-shared make sudo make install cd .. echo "downloading libvpx VP8/VP9 video encoder and decoder)" # use git or tarball (not both) git clone --depth 1 http://git.chromium.org/webm/libvpx.git cd libvpx # wget http://webm.googlecode.com/files/libvpx-v1.1.0.tar.bz2 (this seems not to be update,but can still be used if the fedoraproject link below is not available)) # wget http://pkgs.fedoraproject.org/repo/pkgs/libvpx/libvpx-v1.2.0.tar.bz2/400d7c940c5f9d394893d42ae5f463e6/libvpx-v1.2.0.tar.bz2 # tar xvjf libvpx-v1.2.0.tar.bz2 # cd libvpx-v1.2.0 echo "installing libvpx" ./configure --disable-examples make sudo make install cd .. sudo ldconfig echo "downloading ffmpeg" # git clone http://repo.or.cz/r/ffmpeg.git git clone git://source.ffmpeg.org/ffmpeg.git cd ffmpeg/ # wget http://ffmpeg.org/releases/ffmpeg-2.0.tar.bz2 # tar -xvjf ffmpeg-2.0.tar.bz2 # cd ffmpeg-2.0/ echo "installing ffmpeg" if [ $flag -eq 0 ]; then ./configure --enable-gpl --enable-libass --enable-libfdk-aac --enable-libopus --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-libvpx else ./configure --enable-gpl --enable-libass --enable-libfdk-aac --enable-libopus --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-libvpx --enable-shared fi make sudo make install hash -r cd .. # move up one level to prepare folder cd .. # move up one level to opencv folder echo "Checking to see if you're using your new ffmpeg" ffmpeg 2>&1 | head -n1 sudo ldconfig
步骤2(安装OpenCV和必需软件包)
echo "Installing Dependenices" sudo apt-get install libtiff4-dev libjpeg-dev libjasper-dev echo "installing Video I/O libraries,support for Firewire video cameras and video streaming libraries" sudo apt-get install libav-tools libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev v4l-utils v4l-conf echo "installing the Python development environment and the Python Numerical library" sudo apt-get install python-dev python-numpy echo "installing the parallel code processing library (the Intel tbb library)" sudo apt-get install libtbb-dev echo "installing the Qt dev library" sudo apt-get install libqt4-dev libgtk2.0-dev echo "installing other dependencies (if need be it would upgrade current version of the packages)" sudo apt-get install patch subversion ruby librtmp0 librtmp-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libvpx-dev libxvidcore-dev echo installing optional packages" sudo apt-get install libdc1394-utils libdc1394-22-dev libdc1394-22 libjpeg-dev libpng-dev libtiff-dev libjasper-dev
第3步(运行ldconfig)
# Open a new terminal window # Open /etc/ld.so.conf and check,# if the paths "/usr/lib" and "/usr/local/lib" including the quote exist in the file. If not,add them manually or by sudo echo "/usr/local/lib" >> /etc/ld.so.conf sudo echo "/usr/lib" >> /etc/ld.so.conf # execute the following sudo ldconfig
步骤4a(构建和安装操作系统使用)
# still ensure you haven't close the new terminal window open in STEP 3 # execute the following mkdir os_build cd os_build cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_NEW_PYTHON_SUPPORT=ON -DINSTALL_PYTHON_EXAMPLES=ON -DWITH_TBB=ON -DWITH_V4L=ON -DINSTALL_C_EXAMPLES=ON -DBUILD_EXAMPLES=ON -DWITH_QT=ON -DWITH_OPENGL=ON -DWITH_OPENCL=ON -DWITH_EIGEN=ON -DWITH_OPENEXR=ON .. make sudo make install # add the following to user environment variable ~/.bashrc export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/usr/local/lib/pkgconfig # execute the following sudo ldconfig # start to use and enjoy opencv,it should have been install into any of these locations # /usr/local/include/opencv2,/usr/local/include/opencv,/usr/include/opencv,/usr/include/opencv2,/usr/local/share/opencv # /usr/local/share/OpenCV,/usr/share/opencv,/usr/share/OpenCV,/usr/local/bin/opencv*,/usr/local/lib/libopencv*
STEP 4b(Build for Java Usage):可选
# still ensure you haven't close the new terminal window open in STEP 4 # execute the following cd .. mkdir java_build cd java_build cmake -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_SHARED_LIBS=OFF -DINSTALL_PYTHON_EXAMPLES=ON -DWITH_TBB=ON -DWITH_V4L=ON -DINSTALL_C_EXAMPLES=ON -DBUILD_EXAMPLES=ON -DWITH_QT=ON -DWITH_OPENGL=ON -DWITH_OPENCL=ON -DWITH_EIGEN=ON -DWITH_OPENEXR=ON .. make # You can check the "java_build/bin" directory to locate the jar and libopencv_java.so file for your development # As stated in the docs,the Java bindings dynamic library is all-sufficient,i.e. doesn’t depend on other OpenCV libs,but includes all the OpenCV code inside
步骤5(安装v4l:注意:安装v4l-utils后,opencv安装适用于Ubuntu 12.04.2和OpenCV 2.4.6.1)
# still ensure you haven't close the new terminal window open in STEP 3 # goto http://www.linuxtv.org/downloads/v4l-utils # download the latest v4l such as v4l-utils-0.9.5.tar.bz2 # copy the downloaded file to the current terminal dir (following prevIoUs step,this should be <opencv-dir>/prepare) # execute the following tar -xvjf v4l-utils-0.9.5.tar.bz2 cd v4l-utils-0.9.5/ ./configure make sudo make install cd .. cd .. # (to go to <opencv-dir>) sudo ldconfig
值得注意
# To check the path where opencv & other lib files are stored,do: pkg-config --cflags opencv (output will come as) -I/usr/include/opencv pkg-config --libs opencv (output will come as) -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ --ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann # The above paths are needed to compile your opencv programs,as given in the next illustration. # write a simple C program to test,by saving below program in a file named DisplayImage.c #include <stdio.h> #include <opencv2/highgui/highgui.hpp> int main(int argc,char *argv[]) { IplImage* img=0; /* pointer to an image */ printf("Hello\n"); if(argv[1] != 0) img = cvLoadImage(argv[1],0); // 1 for color else printf("Enter filename\n"); if(img != 0) { cvNamedWindow("Display",CV_WINDOW_AUTOSIZE); // create a window cvShowImage("Display",img); // show image in window cvWaitKey(0); // wait until user hits a key cvDestroyWindow("Display"); } else printf("File not found\n"); return 0; } # write a simple C++ program to test,by saving below program in a file named DisplayImage.cpp #include <stdio.h> #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; int main( int argc,char** argv ) { Mat image; image = imread( argv[1],1 ); if( argc != 2 || !image.data ) { printf( "No image data \n" ); return -1; } namedWindow( "Display Image",CV_WINDOW_AUTOSIZE ); imshow( "Display Image",image ); waitKey(0); return 0; } # To compile & run : g++ <filename: e.g. DisplayImage.c or DisplayImage.cpp> `pkg-config --cflags --libs opencv` && ./a.out img or g++ -I/usr/include/opencv -I/usr/local/include -lopencv_core -lopencv_highgui -lopencv_ml -lopencv_imgproc -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann -lopencv_nonfree <filename: e.g. DisplayImage.c or DisplayImage.cpp> && ./a.out img where “img” is the name of any image with extension within the same folder . You should be able to see “Hello” and the image in a different window. If this runs,Congrats! now you can run any C/C++ program with opencv lib. # Now lets simplify the above big command by making a shortcut for it: go to your local home directory(cd /home/) and open the .bashrc file using gedit(the file will be hidden). Append the following to the file: alias gcv="g++ -I/usr/include/opencv -I/usr/local/include -lopencv_core -lopencv_highgui -lopencv_ml -lopencv_imgproc -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann -lopencv_nonfree" and save. Close the terminal and open it again.(as this process requires relogin of the terminal) # Now,go to directory containing a sample program & do gcv <filename: e.g. DisplayImage.c or DisplayImage.cpp> && ./a.out or gcv <filename: e.g. DisplayImage.c or DisplayImage.cpp> ./a.out input_img.jpg
您可以看到命令现在变得类似于$cc filename.c,$./ a.out,它们通常用于编译和执行C/C++程序.
apt-cache search opencv
收益:
libcv-dev - Translation package for libcv-dev libcv2.3 - computer vision library - libcv* translation package libcvaux-dev - Translation package for libcvaux-dev libcvaux2.3 - computer vision library - libcvaux translation package libhighgui-dev - Translation package for libhighgui-dev libhighgui2.3 - computer vision library - libhighgui translation package libopencv-calib3d-dev - development files for libopencv-calib3d libopencv-calib3d2.3 - computer vision Camera Calibration library libopencv-contrib-dev - development files for libopencv-contrib libopencv-contrib2.3 - computer vision contrib library libopencv-core-dev - development files for libopencv-core libopencv-core2.3 - computer vision core library libopencv-dev - development files for opencv libopencv-features2d-dev - development files for libopencv-features2d libopencv-features2d2.3 - computer vision Feature Detection and Descriptor Extraction library libopencv-flann-dev - development files for libopencv-flann libopencv-flann2.3 - computer vision Clustering and Search in Multi-Dimensional spaces library libopencv-gpu-dev - development files for libopencv-gpu libopencv-gpu2.3 - computer vision GPU Processing library libopencv-highgui-dev - development files for libopencv-highgui libopencv-highgui2.3 - computer vision High-level GUI and Media I/O library libopencv-imgproc-dev - development files for libopencv-imgproc libopencv-imgproc2.3 - computer vision Image Processing library libopencv-legacy-dev - development files for libopencv-legacy libopencv-legacy2.3 - computer vision legacy library libopencv-ml-dev - development files for libopencv-ml libopencv-ml2.3 - computer vision Machine Learning library libopencv-objdetect-dev - development files for libopencv-objdetect libopencv-objdetect2.3 - computer vision Object Detection library libopencv-video-dev - development files for libopencv-video libopencv-video2.3 - computer vision Video analysis library opencv-doc - OpenCV documentation and examples python-opencv - Python bindings for the computer vision library