ubuntu20.04+安装单opencv和多个opencv+vscode

记录在ubuntu上,基于源码安装单个opencv和多个opencv

1、单版本安装

1.1、安装依赖

在终端中安装依赖:

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

1.2、下载源码安装

官网下载sources源码,版本选择第二个(最新的可能存在不稳定或其他bug,选第二个可能会稳定点)

下载到本地后解压(最好不要存在中文或奇怪字符的路径),在命令行中进入opencv-version文件夹,创建并进入build文件夹mkdir build && cd build,cmake编译cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=True ..

(这里可能会卡在:IPPICV: Download: ippicv_2020_lnx_intel64_20191018_general.tgz 或者:ADE: Downloading v0.1.2a.zip from https://github.com/opencv/ade/archive/v0.1.2a.zip)等地方,因为是从raw.githubusercontent.com下载,众所周知这是不稳定的网站。网上也有其他解决方法,比如手动下载等,我觉得都太麻烦,不如重启几次,说不定就能访问了,至少我是这样的

结束后执行make指令(当然可以多线程,先nproc命令查询你的线程数,我的是20,所以使用j15指定15个线程)sudo make -j15,这段等待时间较长。

完成后,指定sudo make install即可

1.3、环境配置

在cmake命令中设置了OPENCV_GENERATE_PKGCONFIG=ON,所以在/usr/local/lib/pkgconfig中生成了opencv4.pc文件,里面记录了opencv头文件、库文件的路径,现在配置一下(应该是环境变量一类,将其暴露给全局变量)

通过sudo vim /etc/bash.bashrc打开后在最后追加:

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

保存退出后,更新source /etc/bash.bashrc

修改动态库:通过sudo vim /etc/ld.so.conf.d/opencv.conf ,在里面添加/usr/local/lib,然后保存退出,再更新一下sudo ldconfig

1.3、检查校验

#终端输入以下两命令,显示正常则安装成功
pkg-config --modversion opencv4 #查看版本号
pkg-config --libs opencv4 #查看libs库

除此之外,opencv源码提供了测试程序,位于opencv-version/samples/cpp/examples_cmake,在终端进入该文件夹,然后:

mkdir build
cd ./build
cmake ..
make
./opencv_example 执行该可执行文件

会弹出一个框并显示“Hello OpenCV”

注意:在cmake阶段,如果cmake文件中需要opencv,则在编译时会打印找到的opencv路径,可以以此判断是否是期望的opencv版本

1.4、在vscode中测试

vscode安装不说了,现在在vscode中新建一个opencvtest.cpp文件,内容为:

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char** argv){
	// 注意这里修改成你的图片路径
	Mat src = imread("test.jpeg",IMREAD_GRAYSCALE); //读取图片
	if (src.empty()) {                     //判断是否找到图片
		printf("没有找到图片 ");           //输出文字
		return -1;
	}
	else
	{
		namedWindow("input",WINDOW_AUTOSIZE);// 显示窗口命名为input ;WINDOW_AUTOSIZE显示大小为图片自定义大小,且不可以更改大小
		imshow("input",src); //显示
		waitKey(0);//显示的毫秒时间,如果函数参数<=0表示一直显示。>0表示显示的时间
		destroyAllWindows();
		return 0;
 
	}
}

c_cpp_properties.json
在.vscode文件夹的c_cpp_properties.json中,includePath下添加"/usr/local/include/opencv4"(解决检测到 #include 错误。请更新 includePath。已为此翻译单元(/home/zjgdyjy/WorkSpace/tensorrtx-master/yolov5/CutImage/opencvtest.cpp)禁用波形曲线。)

task.json
快捷键shift+ctrl+p搜索全局命令tasks,选择g++ 生成活动文件,配置内容:

// 节选
"args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.out",
                // 解决opencv2/opencv.hpp: 没有那个文件或目录
                "`pkg-config","--libs","--cflags","opencv4`"	//这是添加第三方库代码,要添加什么库直接继续加就行,不要忘记了 ` 符号
                //如下面再加个 gazebo11 第三方库(你得保证你安装的第三方库中含有.pc文件)
              // "`pkg-config","--libs","--cflags","opencv4,gazebo11`"
            ],

launch.json
运行——>添加配置——>C++(GDB/LLDB)——>

{
    "configurations": [
        {
            "name": "C/C++: cpp 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}.out",
            "args": [
                "`pkg-config","--libs","--cflags","opencv4`",
            ],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ build active file",		//要和 task.json的label字段一致
            "miDebuggerPath": "/usr/bin/gdb",
            //下面这行命令可以去除Vscode中编译后出现 [1]+   Done....  的提示
            "miDebuggerArgs": "-q -ex quit; wait() { fg >/dev/null; }; /usr/bin/gdb -q --interpreter=mi"
        }
    ],
    "version": "2.0.0"
}

如果想生成一个终端可以改:“externalConsole”: true ,弹出命令窗口

2、卸载

有时候需要卸载opencv,这里记录步骤。在安装步骤中执行cmake -D CMAKE_BUILD_TYPE=RELEASE ..后显示如下,当执行sudo make install后会被安装到/usr/local中,
在这里插入图片描述
并且在sudo make install后,会显示详细的安装日志:

-- Installing: /usr/local/include/opencv4/opencv2/cvconfig.h
-- Installing: /usr/local/lib/cmake/opencv4/OpenCVModules.cmake
-- Installing: /usr/local/share/opencv4/valgrind.supp
-- Installing: /usr/local/bin/opencv_annotation

总结就是安装到了/usr/local/include/opencv*/usr/local/share/opencv*/usr/local/lib/libopencv*/usr/local/bin/opencv*下。

如果是通过源码安装的,进入编译时创建的build目录,然后执行sudo make uninstall会自动删除相关文件。如果编译的项目已经被删除了,可以下载源码重新编译,但是注意cmake -D CMAKE_INSTALL_PREFIX=/usr/local中CMAKE_INSTALL_PREFIX应当保持和之前安装时一样。一般来说默认在/usr/local中,可以查看/usr/local/lib中是否存在大量libopencv*.so库文件验证。

3、安装多个版本

下载指定版本的源码后依此执行:

mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_4.8.1 -D CMAKE_BUILD_TYPE=Release  -D  OPENCV_ENABLE_NONFREE=True ..
make -j8      # 8代表开8个线程去处理,可以设置为 2,4,6等
sudo make install

其中CMAKE_INSTALL_PREFIX可以理解为安装路径,基于此可以将不同版本的opencv安装到不同文件夹中,这里安装4.8.1版本。

安装后在/usr/local下可以看到两个opencv

在这里插入图片描述
在项目中使用CMakeLists.txt管理时,如下添加opencv:

# 在代码中引入头文件opencv2/opencv.hpp,即在/usr/local/opencv_4.5.5/include/opencv4中的opencv2/opencv.hpp
include_directories(/usr/local/opencv_4.5.5/include/opencv4)
link_directories(/usr/local/opencv_4.5.5/lib)

# 链接要使用的库,比如opencv_highgui是和waitKey()相关的
target_link_libraries(main opencv_core opencv_imgcodecs opencv_imgproc opencv_dnn opencv_highgui)

参考

vscode配置C++和Opencv(ubuntu18.04)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一个对称矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值