Ubuntu下opencv编译总结_ubuntu 编译opencv

最近频繁重装Ubuntu系统o(╥﹏╥)o,对重装Ubuntu涉及的opencv做个总结。

Ubuntu安装依赖项

cuda、cudnn等安装这里就不说了,主要为通过终端执行的相关依赖项安装指令,参考链接:
  ubuntu 18.04编译opencv3.4.3 with python3.6 cuda9.2 gdal
  Ubuntu 18.04源码编译安装OpenCV 4.0流程

sudo apt install -y build-essential cmake git pkg-config libopenexr-dev libblas-dev 
sudo apt install -y python-dev python-numpy libtbb2 libtbb-dev
sudo apt install -y libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev libjasper-dev
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libavutil-dev

sudo apt install -y \
        libx264-dev \
        mesa-utils \
        libgtk2.0-dev \
        libxvidcore-dev \
        yasm \
        libxine2-dev \
        libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
        libv4l-dev \
        libfaac-dev \
        libmp3lame-dev \
        libopencore-amrnb-dev \
        libtheora-dev \
        libvorbis-dev \
        ffmpeg \
        libeigen3-dev libeigen3-doc \
		liblapack-dev \
        tesseract-ocr \
        tesseract-ocr-jpn \
        libgflags-dev \
        libleptonica-dev \
        libtesseract-dev \
        gphoto2 \
        liblapacke-dev \
        libgoogle-glog-dev \
        libprotobuf-dev \
        libprotoc-dev \
        protobuf-compiler \
        ccache \
        libgphoto2-dev \
        libavresample-dev \
        libatlas-base-dev \
        gfortran

下载安装包

下载opencv源码:opencv的github链接
  下载opencv_contrib源码:opencv_contrib的github链接(可以不用,看需要)
  需要注意,如果要编译contrib,需要使contrib的版本号与opencv对应。下载完成后均解压,放置到自己的目标位置。

编译opencv动态库(so)

参考链接:openCV+opencv_contrib(编译源码)
  在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

生成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文件)
  有的项目需要使用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流程开启摄像头/视频,或者像ubuntu 16.04 OpenCV3.2.0完全编译安装打开一张图片。
  首先创建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,下载相关文件(相比之前的版本新增了微信的二维码引擎,可以去GitHub上下载)放到统一路径下,然后修改cmake文件中链接为文件路径,如"file:///home/work/downloads/"

### OpenCV C++ 教程与文档 #### 安装配置指南 对于希望在不同操作系统上设置开发环境的开发者而言,存在多种方法来安装和配置OpenCV。例如,在Ubuntu环境中,可以通过包管理器轻松安装所需的依赖项并编译OpenCV库[^4]。 #### 初学者入门教程 针对初次接触OpenCV的用户,《探索图像处理的奥秘:OpenCV C++ 个人笔记总结》提供了一套详尽的教学材料,特别适合那些想要了解如何在Visual Studio 2017平台上执行基本图像处理任务的人群[^1]。这份资料不仅介绍了必要的理论背景,还包含了大量实用的例子,有助于读者逐步建立起扎实的知识体系。 #### 实际应用案例 为了验证本地环境是否已正确搭建完毕,一份简单的`main.cpp`程序展示了怎样加载一张图片并显示出来。此代码片段强调了路径设定的重要性,并提供了错误检测机制以应对可能遇到的问题[^2]: ```cpp #include<iostream> #include<opencv2/opencv.hpp> int main() { std::string image_path = "your_image_path_here"; cv::Mat img = cv::imread(image_path); if(img.empty()){ std::cerr << "Error loading image!" << std::endl; return -1; } cv::imshow("Loaded Image", img); cv::waitKey(0); return 0; } ``` 请注意替换上述代码中的`your_image_path_here`为实际存在的图片位置。 #### 高效下载资源的方法 当需要获取特定版本的OpenCV SDK时,可以利用命令行工具如`axel`来进行加速下载。比如要获得适用于Android平台的SDK压缩包,则可采用如下指令完成操作[^3]: ```bash axel -n 100 https://example.com/path/to/file.zip ``` 这里建议根据实际情况调整URL链接指向目标文件地址。 #### 封装常用功能 为了让开发者能够更便捷地运用OpenCV的功能,某些项目会将常用的算子进行了二次封装,形成易于使用的接口形式。这种方式不仅可以简化编码过程,而且提高了代码重用性和维护效率[^5].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值