文章目录

  • 正文
  • 1.普通安装
  • 2.开启cuda的安装


正文

官方安装说明https://docs.opencv.org/3.1.0/d7/d9f/tutorial_linux_install.html

1.普通安装

1)安装
转载

采用源码编译的安装方式,基本也就是这种方法了,首先在官网下载你想安装的版本的opencv压缩包,下载连接如下:
https://github.com/opencv/opencv/releases

首先,安装一些依赖,根据自己的情况选择,如果不知道自己安装了那些依赖,就都输入一遍,如果已经安装系统会自动跳过,不会重复安装

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

cd ~/opencv-3.4.3  # 进入opencv文件夹
mkdir build # 创建build文件夹
cd build # 进入build文件夹

#cmake指令,如果没有特殊要求建议就选择默认的就可以
#注意,后面的两个点千万不能省,代表了上级目录
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..  
# “../opencv_contrib-master/modules/是opencv_contrib-master解压后的路径,如果需要contrib,请用这条
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-master/modules/ ..

#如果需要编译静态库
cmake  -DBUILD_SHARED_LIBS=NO   -DCMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=../build-static -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-master/modules/ 

make -j8 # 多线程执行make任务

# 最后一步,安装库文件
sudo make install

#安装完成
以上安装会把opencv安装到/usr/local/lib
修改 CMAKE_INSTALL_PREFIX=/usr/local/opencv410 …

libjaster-dev报错解决方案:
sudo apt-get install libjaster-dev

提示:errorE: unable to locate libjasper-dev

后来google到解决办法,复制到这里

sudo add-apt-repository “deb http://security.ubuntu.com/ubuntu xenial-security main”
sudo apt update
sudo apt install libjasper1 libjasper-dev

成功的解决了问题,其中libjasper1是libjasper-dev的依赖包

2)查询是否安装成功

-----------------以下部分我没配置,网上说有用,先拷贝在这里-----------------------------
9.sudo make install 执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到

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

执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加

/usr/local/lib

10.执行如下命令使得刚才的配置路径生效

sudo ldconfig

11.配置bash

sudo gedit /etc/bash.bashrc

在最末尾添加

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

保存,执行如下命令使得配置生效

source /etc/bash.bashrc

更新

sudo updatedb


下面用一个小程序测试一下

找到
cd到opencv-3.4.1/samples/cpp/example_cmake目录下
我们可以看到这个目录里官方已经给出了一个cmake的example我们可以拿来测试下
按顺序执行

cmake .
make
./opencv_example

即可看到打开了摄像头,在左上角有一个hello opencv
即表示配置成功

3)自己的cpp想要调用成功,一定得研究上面example中的CmakeLists.txt的写法
4) 如果想查看contrib模块是否安装好,可以尝试contrib模块中的example,里面有正确调用方式。因为不同版本的方式可能有差异,这种办法最保险

2.开启cuda的安装

开启cuda需要在cmake的时候添加选项
命令行执行cmake-gui弹出可视化界面,勾选with-cuda项,cudacodec模块现移到contrib中,需要编译额外模块
1)生成后,执行编译,报错如下:

precomp.hpp:62:29: fatal error: nvcuvid.h: No such file or directory
         #include <nvcuvid.h>

解决方案:据说在cuda10 以后就被弃了.需要在英伟达官网把需要cuda10以前的组件下载下来(https://developer.download.nvidia.cn/designworks/video-codec-sdk/secure/9.1/Video_Codec_SDK_9.1.23.zip?Dn2TXtKWvYVUQQ2ZuM1m8TJRcZ3gajrAUZl_lQFzs0F1yPgO74G4U2ZjM5nooSgy2ImDNBC-Rq346mvytKd47WmUFcl6rLRdVvQMTY4skiE8dLOk002jQXF1TaWs_NvJAl5ANefU8iB0ENldvqr9p9gx25r-9c9ZxIy6raB8Tlk)

解压缩之后把 Video_Codec_SDK_9.1.23/include/ 下面的cuviddec.h 和 nvcuvid.h文件拷贝到/usr/include下面就好了

然后编译。

测试代码1

/**
测试cuda是否可用
*/

#include <iostream>
#include "opencv2/opencv.hpp"
#include <opencv2/core/cuda.hpp>

#pragma comment(lib,"opencv_gpu2410.lib")
#pragma comment(lib,"opencv_core2410.lib")

using namespace std; 
using namespace cv; 
using namespace cv::cuda;
int main()
{
	int i;
	try
	{
		cout << "cuda enabled device count: "<< getCudaEnabledDeviceCount()<<endl;
	}
	catch(const cv::Exception& ex)
	{
		cout << "Error:" << ex.what() <<endl;
	}

	return 0;
}

测试代码2

#include "opencv2/opencv_modules.hpp"

#if defined(HAVE_OPENCV_CUDACODEC)

#include <opencv2/core.hpp>
#include <opencv2/cudacodec.hpp>
#include <opencv2/highgui.hpp>

int main()
{

    const std::string fname ="rtsp://admin:wg12345678@10.0.230.12:554/h264/ch1/main/av_stream";
    cv::namedWindow("GPU", cv::WINDOW_NORMAL);

    cv::cuda::GpuMat d_frame;
    cv::Ptr<cv::cudacodec::VideoReader> d_reader = cv::cudacodec::createVideoReader(fname);

    for (;;)
    {

        if (!d_reader->nextFrame(d_frame))
            break;

        cv::Mat frame;
        d_frame.download(frame);
        cv::imshow("GPU", frame);

        if (cv::waitKey(3) > 0)
            break;
    }
    return 0;
}

#else
int main()
{
    std::cout << "OpenCV was built without CUDA Video decoding support\n" << std::endl;
    return 0;
}
#endif

在跑rtsp的时候报错:
ffmpeg_video_source.cpp:101: error: (-215:Assertion failed) init_MediaStream_FFMPEG() in function ‘FFmpegVideoSource’