本文记录ubuntu下安装opencv过程,步骤来自 opencv官网
1、安装opencv所需的库(编译器、必须库、可选库)
转载请说明 http://www.cnblogs.com/llxrl/p/4471831.html
- GCC 4.4.x or later
- CMake 2.6 or higher
- Git
- GTK+2.x or higher, including headers (libgtk2.0-dev)
- pkg-config
- Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy)
- ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
- [optional] libtbb2 libtbb-dev
- [optional] libdc1394 2.x
- [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
1 [compiler] sudo apt-get install build-essential
2 [required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
3 [optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
2、从官网下载最新opencv源码(2.4以上)
http://sourceforge.net/projects/opencvlibrary/
或者github
或者百度云盘:https://pan.baidu.com/s/1HbsqFUIr6-xCEaN-e6IA9w
3、编译opencv
将opencv放至任意目录,解压
unzip opencv- 3.0. 0-rc1. zip
创建编译目录,编译
cd ~/opencv-3.0.0-rc1
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install
4、测试opencv
1) 创建工作目录
mkdir ~/opencv-lena cd ~/opencv-lena gedit DisplayImage.cpp
2) 编辑如下代码
#include <stdio.h> #include <opencv2/opencv.hpp> using namespace cv; int main(int argc, char** argv ) { if ( argc != 2 ) { printf("usage: DisplayImage.out <Image_Path>\n"); return -1; } Mat image; image = imread( argv[1], 1 ); if ( !image.data ) { printf("No image data \n"); return -1; } namedWindow("Display Image", WINDOW_AUTOSIZE ); imshow("Display Image", image); waitKey(0); return 0; }
3) 创建CMake编译文件
gedit CMakeLists.txt
写入如下内容
cmake_minimum_required(VERSION 2.8) project( DisplayImage ) find_package( OpenCV REQUIRED ) add_executable( DisplayImage DisplayImage.cpp ) target_link_libraries( DisplayImage ${OpenCV_LIBS} )
4) 编译
cd ~/opencv-lena cmake . make
5) 执行
此时opencv-lena文件夹中已经产生了可执行文件DisplayImage,下载lena.jpg放在opencv-lena下,运行
./DisplayImage lena.jpg
6) 结果
-- Other third-party libraries:
-- Use IPP: 8.2.1 [8.2.1]
-- at: /home/test/Downloads/opencv3/opencv-3.0.0/3rdparty/ippicv/unpack/ippicv_lnx
-- Use IPP Async: NO
-- Use Eigen: YES (ver 3.2.0)
-- Use TBB: NO
-- Use OpenMP: NO
-- Use GCD NO
-- Use Concurrency NO
-- Use C=: NO
-- Use pthreads for parallel for:
-- YES
-- Use Cuda: NO
-- Use OpenCL: YES
禁止opencl
注释以下几行:
# --- OpenCL ---
#if(WITH_OPENCL)
# include(cmake/OpenCVDetectOpenCL.cmake)
#endif()
cmake 会变成:
-- Other third-party libraries:
-- Use IPP: 8.2.1 [8.2.1]
-- at: /home/test/Downloads/opencv3/opencv-3.0.0/3rdparty/ippicv/unpack/ippicv_lnx
-- Use IPP Async: NO
-- Use Eigen: YES (ver 3.2.0)
-- Use TBB: NO
-- Use OpenMP: NO
-- Use GCD NO
-- Use Concurrency NO
-- Use C=: NO
-- Use pthreads for parallel for:
-- YES
-- Use Cuda: NO
-- Use OpenCL: NO
最新发现有的时候,如果opencl编译进入到binary可能会出现莫名其妙的问题,建议编译时去掉,下面是测试代码:
(如果有问题,代码会挂在 cvResize 位置)
#include <stdio.h>
#include <opencv/cv.h>
#include <opencv/cxcore.h>
#include <opencv/highgui.h>
#include <opencv2/imgproc.hpp>
#include "opencv2/core/ocl.hpp"
using namespace cv ;
void ResizeDemo()
{
ocl::setUseOpenCL(false);
// Mat img1=imread("testScale.png");
// Mat img2;
将原图像变为32*32,长宽比被改变了
// imshow("WindowOrg",img1);
// waitKey(10000);
//
// resize(img1,img2,Size(32,32),0,0,CV_INTER_LINEAR);
// imshow("WindowNew",img2);
//
// waitKey(10000);
IplImage *src = cvLoadImage("testScale.png");
IplImage *desc;
CvSize sz;
double scale = 0.5;
if(src)
{
sz.width = src->width*scale;
sz.height = src->height*scale;
desc = cvCreateImage(sz,src->depth,src->nChannels);
cvResize(src,desc,CV_INTER_CUBIC);
cvNamedWindow("src",CV_WINDOW_AUTOSIZE);
cvNamedWindow("desc",CV_WINDOW_AUTOSIZE);
cvShowImage("src",src);
cvShowImage("desc",desc);
cvWaitKey(0);
cvReleaseImage(&src);
cvReleaseImage(&desc);
cvDestroyWindow("src");
cvDestroyWindow("desc");
}
}