(原+转)ubuntu16中安装opencv2.4.11

Posted darkknightzh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(原+转)ubuntu16中安装opencv2.4.11相关的知识,希望对你有一定的参考价值。

转载请注明出处:

http://www.cnblogs.com/darkknightzh/p/5638117.html

参考网址:

http://www.cnblogs.com/jeakon/archive/2013/05/08/3066469.html

http://my.oschina.net/u/1757926/blog/293976

 

1 预先安装一些软件:

sudo apt-get install build-essential cmake libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev  

2 去管网下载opencv压缩包

3 解压压缩包到某文件夹(用windows习惯了,直接右键提取到此处。。。)

4 command中cd到该解压缩的文件夹中,然后创建build文件夹 mkdir build

5 进入build目录 cd build

6 编译opencv源码

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

====================================================

161107更新:

1). 更新了cuda8.0之后,opencv重新安装时,提示:

 Unsupported gpu architecture \'compute_11\'

http://stackoverflow.com/questions/28010399/build-opencv-with-cuda-support指出,上面的命令换成

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Kepler ..

便可以解决该问题。

http://www.th7.cn/system/lin/201702/203301.shtml

中指出,可以设置为自动识别:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Auto ..

2). 上面可以过去,之后还是会有错误:

graphcuts.cpp error \'NppGraphCutState\' has not been declared

按照https://kangkang113.wordpress.com/2016/09/02/deep-learning-framework-using-gtx1080ubuntu16-04/中的说明,需要修改源代码,进入graphcuts.cpp(位置opencv-2.4.11/modules/gpu/src/graphcuts.cpp),然把45行改成

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION>=8000)

之后便可以编译成功。

3). 编译中会有很多warning,如:

/home/opencv-2.4.11/modules/core/include/opencv2/core/cuda_devptrs.hpp:147:17: warning: ‘template<class T> struct cv::gpu::DevMem2D_’ is deprecated [-Wdeprecated-declarations]
         typedef DevMem2D_<unsigned char> DevMem2Db;
                 ^
/home/opencv-2.4.11/modules/core/include/opencv2/core/cuda_devptrs.hpp:138:61: note: declared here
         template <typename T> struct __CV_GPU_DEPR_BEFORE__ DevMem2D_ : public 

暂时没管这些wanring。

161107更新结束

170121更新:

今天装了opencv2.4.13,上面2).中的地方已经修改了,因而不需要再修改了。

170121更新结束

====================================================

170620更新:

在安装了anaconda,而且默认g++变成了anaconda中的g++之后,会提示:

 /usr/bin/ld: /home/XXX/anaconda2/bin/../lib/gcc/x86_64-unknown-linux-gnu/5.4.0/crtbeginS.o:unrecognized relocation(0x2a) in section `.text\'
    /usr/bin/ld: final link failed: Bad value 
    collect2: error: ld returned 1 exit status

上面的错误见:http://www.cnblogs.com/darkknightzh/p/6950263.html

主要是anaconda的问题吧。。。此处使用cmake,因而需要将c++编译器改成系统自带的,使用CMAKE_C_COMPILERCMAKE_CXX_COMPILER这两个来设定cmake使用的c及c++编译器(http://blog.csdn.net/10km/article/details/50444715),具体代码如下(结合了161107中的更新):

cmake -D CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++-4.9 -D CMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc-4.9 -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CUDA_GENERATION=Auto ..

使用上述命令后,编译opencv成功了。折腾人啊。。。

170620更新结束

====================================================

7 安装

sudo make install

 

测试:

1. 写helloworld.cpp

#include <opencv2/opencv.hpp>
using namespace cv;

#include <stdio.h>

int main( int argc, char** argv )
{
    if( argc != 2 )//判断参数是否是两个
    {
        printf( " No image data \\n " );
        return -1;
    }

    char* imageName = argv[1];
    Mat image = imread( imageName, 1 );//读入图片;
    if(  !image.data)//判断是否有数据
    {
        printf( " No image data \\n " );
        return -1;
    }

    namedWindow( imageName, CV_WINDOW_AUTOSIZE );
    imshow( imageName, image );//显示图片

    waitKey(0);
    return 0;
}

2. 写cmake的makefile,即CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(helloworld)
add_executable(helloworld helloworld.cpp)
find_package(OpenCV REQUIRED)
target_link_libraries(helloworld ${OpenCV_LIBS})

=======================================================================================

170121更新:

刚才编译opencv2.4.13,之后编译该程序时,提示:

cannot find -lopencv_dep_cudart

https://github.com/opencv/opencv/issues/6542中指出,在cmake时,加上-D CUDA_USE_STATIC_CUDA_RUNTIME=OFF(开始我以为是编译opencv时候加上这句,结果编译这个测试程序还是有问题。后来才意识到,是编译这个测试程序时加上这句才对。)

另一种解决方法就是,如http://stackoverflow.com/questions/41608111/cannot-find-lib-libopencv-dep-cudart中指出的,在上面的CMakeLists.txt中find_package(OpenCV REQUIRED)之前加上:

set(CUDA_USE_STATIC_CUDA_RUNTIME OFF)

之后按照后续的继续编译,也可以成功。

http://code.opencv.org/issues/2166中指出,由于gpumat (.hpp, .cpp)在revision #6957已经被移到opencv_core中,因而编译OpenCV with CUDA enabled时,即便工程不使用cuda,每个工程仍旧需要npp (npp32_42_9.dll, 50MB) 和 cudart (cudart32_42_9.dll) dll(这个应该是windows上面的,linux应该就是so了),

 

170121更新结束

=======================================================================================

3. 进入该文件夹,创建build,mkdir build

4. 之后:

cmake ..
make

得到可执行文件 helloworld

5. 拷贝一张图像到该可执行文件文件夹中,输入

./helloworld 11.jpg

显示图像,说明安装成功

ps

1. 之前未使用步骤1,结果编译没错,运行后,提示

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /home/XXX/file/program/opencv2411/modules/highgui/src/window.cpp, line 483 terminate called after throwing an instance of \'cv::Exception\'

执行步骤1并重新编译了opencv之后,运行便显示图像了(感觉不需要所有的库都装上去,但是还是都装了)。

2. 如果提示没有安装cmake的话,安装一下cmake

3. 第6步中,/usr/local ..这样用就行了。开始一直以为这个是自己设置的目录,结果怎么编译都提示没有文件夹(对linux真心不熟)。。。

4. 如果使用NetBeans IDE的话,

不执行步骤1编译没错,运行时会有如下错误:

编译完之后,需要设置连接器中的库:

库目录如下:

 

添加opencv的库:

本来左侧是没有那一串的,点击“添加PkgConfig库”

出现如下界面,点击“opencv”

最终库里面如下(下图中应该还有库目录的设置,首先截的是这个图,所以没有):

编译后可成功运行。

并未像参考网址中那样,设置libiary等,但是可能那样以后会方便吧。

 

 

以上是关于(原+转)ubuntu16中安装opencv2.4.11的主要内容,如果未能解决你的问题,请参考以下文章

在不同的目录中安装 opencv 2.2

ubuntu16.04安装opencv2.4.10过程中的问题

(原)ubuntu中安装kate

(原)ubuntu14.04中安装gcc4.9和g++4.9

Ubuntu 16.04中安装tftp

在 Ubuntu 16.04 中安装 Android Studio 时出错 [重复]