Ubuntu下opencv编译总结_ubuntu 编译opencv

    libgphoto2-dev \
    libavresample-dev \
    libatlas-base-dev \
    gfortran

    



## 下载安装包


  下载opencv源码:[opencv的github链接](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0)  
   下载opencv\_contrib源码:[opencv\_contrib的github链接](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0)(可以不用,看需要)  
   需要注意,如果要编译contrib,需要使contrib的版本号与opencv对应。下载完成后均解压,放置到自己的目标位置。  
  
     



## 编译opencv动态库(so)


  参考链接:[openCV+opencv\_contrib(编译源码)](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0)  
   在opencv的解压文件中,创建编译文件保存的文件夹,如build,并在该文件夹中打开终端,执行:



cmake -D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/usr/local
-D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules/
-D OPENCV_GENERATE_PKGCONFIG=YES
-D OPENCV_ENABLE_NONFREE=True
-D ENABLE_CXX11=1
-D ENABLE_FAST_MATH=1
-D WITH_TBB=ON
-D WITH_OPENGL=ON
-D WITH_OPENMP=ON
-D WITH_TIFF=ON -D BUILD_TIFF=ON
-D WITH_1394=OFF
-D WITH_GDAL=ON
-D WITH_CUDA=ON -D CUDA_NVCC_FLAGS=“-D_FORCE_INLINES”
-D WITH_CUBLAS=ON -D WITH_CUFFT=ON
-D INSTALL_C_EXAMPLES=OFF
-D INSTALL_PYTHON_EXAMPLES=OFF
-D BUILD_EXAMPLES=OFF …


  以上为举例,目前还未完全测试各条命令有效性,后续更新。  
   其中`PYTHON_DEFAULT_EXECUTABLE`为要安装opencv的python路径,一般Ubuntu中都有多个版本的python;  
   `CMAKE_INSTALL_PREFIX`是编译后相关so文件的放置位置,这个最好保持该设置;  
   `OPENCV_EXTRA_MODULES_PATH`为opencv\_contrib中modules的路径,如果不准备编译opencv\_contrib可以删除这一项。  
  
 **fatal error: nvcuvid.h: No such file or directory**


* 在cuda10的时候,cudacodec会出现nvcuvid.h找不到的情况,我将cudacodec模块删掉可以正常编译,目前最新的opencv\_contrib在2018年12月18日已修复了该bug,如果是使用该时间之后的版本应该可以正常编译。
* 方法二,参考[OpenCV 4.1 CUDA 10.1 linux下编译问题【fatal error: nvcuvid.h: No such file or directory】](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0),可以在官网中下载相关组件,将cuviddec.h 和 nvcuvid.h文件拷贝到/usr/include即可。


  生成makefile文件后,即可执行make操作,如果发现生成表中有数据不对或者生成出错,需要将该文件夹中相关文件删除,再修改cmake指令后重新生成:



查找该机器可使用的编译线程数

nproc

假如输出是8, 执行8线程编译

sudo make -j8
sudo make install


  安装完成后,会在/usr/local/lib中看到lib\*.so.\*文件,并在/usr/local/lib/pkgconfig下生成了opencv.pc文件,记录OpenCV的文件路径,此时进行如下配置:



编辑/etc/bash.bashrc

sudo gedit /etc/bash.bashrc

在文件末尾添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

退出并更新

sudo updatedb

编辑/etc/ld.so.conf.d/opencv.conf

sudo gedit /etc/ld.so.conf.d/opencv.conf

在文件末尾添加

/usr/local/lib

退出并更新

sudo ldconfig


    



## 编译opencv静态库(a)


  参考链接:[Ubuntu16.04下编译OpenCV2.4.13静态库(.a文件)](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0)  
   有的项目需要使用opencv的.a静态库,动态库能生成部分.a文件,但是不完整,因此找了下生成静态库的方法。  
   与创建动态库相同,在opencv文件夹中创建生成文件的文件夹,如static\_release,并在该文件夹中打开终端,执行cmake命令:



cmake -D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/usr/local
-D BUILD_SHARED_LIBS=NO
-D BUILD_PNG=ON
-D BUILD_JASPER=ON
-D BUILD_JPEG=ON
-D BUILD_TIFF=ON
-D BUILD_ZLIB=ON
-D WITH_JPEG=ON
-D WITH_PNG=ON
-D WITH_JASPER=ON
-D WITH_TIFF=ON …


  可以仿照动态库的cmake命令,主要是添加`BUILD_SHARED_LIBS=NO`,代表不编译动态库而是编译静态库,编译结束后就可以在/usr/local/lib/看到生成的一系列.a文件。  
  
     



## 测试


  安装完成后可以通过`pkg-config opencv --modversion`查看opencv是否安装成功及版本号。这里需要说明的是在最新版的opencv4中,/usr/local/lib/pkgconfig下生成的是opencv4.pc,因此需要指定`pkg-config opencv4 --modversion`才能看到相应信息。  
  
   测试代码可以仿照[Ubuntu 18.04源码编译安装OpenCV 4.0流程](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0)开启摄像头/视频,或者像[ubuntu 16.04 OpenCV3.2.0完全编译安装](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0)打开一张图片。  
   首先创建DisplayImage.cpp文件,输入:



#include <cv.h>
#include <highgui.h>
#include <opencv2/core/core.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;

}


  创建CMakeLists.txt 文件,输入:



project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )


  在该文件夹下打开终端,执行:



cmake .
make


  即可生成一个DisplayImage的执行文件,执行./DisplayImage test.jpg即可打开图片, test.jpg为该文件夹下放置的一张图像,也可以指定到其它路径中的图像。  
     



## 卸载



cd /usr
sudo find . -name “*opencv*” | xargs sudo rm -rf


## 20221102更新


  目前OpenCV又做了较多更新,编译上出现了些新的问题,现就4.6.0做一次问题记录  
  
   1)sr.\*、detect.\*下载问题。参考[Ubuntu20.04 安装 Opencv4.4.0](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0),下载相关文件(相比之前的版本新增了微信的二维码引擎,可以去GitHub上下载)放到统一路径下,然后修改cmake文件中链接为文件路径,如"file:///home/work/downloads/"  



* opencv/modules/gapi/cmake/DownloadADE.cmake
* opencv/3rdparty/ippicv/ippicv.cmake
* opencv\_contrib/modules/face/CMakeLists.txt
* opencv\_contrib/modules/wechat\_qrcode/CMakeLists.txt
* opencv\_contrib/modules/xfeatures2d/cmake/download\_boostdesc.cmake
* opencv\_contrib/modules/xfeatures2d/cmake/download\_vgg.cmake


  2)出现“Cannot generate a safe runtime search …”,原因为conda冲突,参考[安装时遇到的cmake与anaconda的冲突问题](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0),打开bashrc,注释掉PATH中包含anaconda的路径,重启终端窗口。完成后再恢复。  
  
   3)出现“recipe for target 'bin/opencv\_test\_…”问题,原因为tiff有冲突,参考[Error installing OpenCV on Ubuntu 16.04](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0),简单的处理方式就是禁止编译TIFF。  
  
   4)安装命令更新,禁止Python2,开通Python3,设定为anaconda的路径:  




cmake -D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/usr/local
-D PYTHON_DEFAULT_EXECUTABLE=~/anaconda3/bin/python
-D BUILD_NEW_PYTHON_SUPPORT=ON
-D BUILD_opencv_python3=ON
-D BUILD_opencv_python2=OFF
-D BUILD_opencv_hdf=OFF
-D BUILD_opencv_java=OFF
-D PYTHON3_PACKAGES_PATH=~/anaconda3/lib/python3.9/site-packages
-D PYTHON3_EXECUTABLE=~/anaconda3/bin/python3.9
-D PYTHON3_INCLUDE_DIR=~/anaconda3/include/python3.9
-D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.9.so.1
-D PYTHON3_NUMPY_PATH=~/anaconda3/lib/python3.9/site-packages
-D OPENCV_EXTRA_MODULES_PATH=/home/work/opencv_contrib/modules/
-D OPENCV_GENERATE_PKGCONFIG=YES
-D OPENCV_ENABLE_NONFREE=True
-D ENABLE_CXX11=1
-D ENABLE_FAST_MATH=1
-D WITH_TBB=ON
-D WITH_OPENGL=ON
-D WITH_OPENMP=ON
-D WITH_TIFF=OFF -D BUILD_TIFF=OFF
-D WITH_1394=OFF
-D WITH_GDAL=ON
-D WITH_CUDA=ON -D CUDA_NVCC_FLAGS=“-D_FORCE_INLINES”
-D WITH_CUBLAS=ON -D WITH_CUFFT=ON
-D INSTALL_C_EXAMPLES=OFF
-D INSTALL_PYTHON_EXAMPLES=OFF
-D BUILD_EXAMPLES=OFF …

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值