文章目录
- 正文
- 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’