ubuntu20.04+opencv+vscode

第一次接触C++的opencv,需要在vscode中编写cv2代码并调试。根据vscode配置C++和Opencv(ubuntu18.04)能够正确配置,是一个靠谱的教程,现在记录一下过程,方面后续参考。

1、安装依赖

在终端中安装依赖:

bash 复制代码
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

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 ..

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

完成后,指定sudo make install即可

3、环境配置

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

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

bash 复制代码
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

3、检查校验

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

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

bash 复制代码
mkdir build
cd ./build
cmake ..
make
./opencv_example 执行该可执行文件

会弹出一个框并显示"Hello OpenCV"

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

4、在vscode中测试

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

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++ 生成活动文件,配置内容:

json 复制代码
// 节选
"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)------>

json 复制代码
{
    "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 ,弹出命令窗口

写在最后

有问题或者不清楚见作者原文,那写的更清楚

相关推荐
好吃番茄11 分钟前
U mamba配置问题;‘KeyError: ‘file_ending‘
人工智能·机器学习
CV-King40 分钟前
opencv实战项目(三十):使用傅里叶变换进行图像边缘检测
人工智能·opencv·算法·计算机视觉
禁默43 分钟前
2024年计算机视觉与艺术研讨会(CVA 2024)
人工智能·计算机视觉
yufei-coder2 小时前
掌握 C# 中的 LINQ(语言集成查询)
windows·vscode·c#·visual studio
whaosoft-1432 小时前
大模型~合集3
人工智能
Dream-Y.ocean2 小时前
文心智能体平台AgenBuilder | 搭建智能体:情感顾问叶晴
人工智能·智能体
丶21362 小时前
【CUDA】【PyTorch】安装 PyTorch 与 CUDA 11.7 的详细步骤
人工智能·pytorch·python
春末的南方城市2 小时前
FLUX的ID保持项目也来了! 字节开源PuLID-FLUX-v0.9.0,开启一致性风格写真新纪元!
人工智能·计算机视觉·stable diffusion·aigc·图像生成
zmjia1112 小时前
AI大语言模型进阶应用及模型优化、本地化部署、从0-1搭建、智能体构建技术
人工智能·语言模型·自然语言处理
jndingxin3 小时前
OpenCV视频I/O(14)创建和写入视频文件的类:VideoWriter介绍
人工智能·opencv·音视频