vscode写python配置opencv_Mac环境,安装OpenCV,VScode断点调试C++程序_weixin_39956350的博客-程序员宅基地

技术标签: vscode写python配置opencv  

背景

最近在研究图像识别相关代码——OpenCV,为了便于调试,就要在Mac上搭建一个调试c++程序的调试环境。我这跑通了,分享给大家。

环境

Mac OS 10.14.5

xcode-select v2354

Visual Studio code 1.35.1

OpenCV 3.4.5

Clang 1001.0.46.4

CMake 3.14.5

步骤说明

编译环境准备

安装OpenCV

安装VScode 插件

VScode 项目配置

OpenCV HelloWorld

环境准备

Mac 自带有C/C++环境,就不再赘述。

Xcode Command Line Tools是必须的,可通过一下命令行触发安装程序,或者下载安装。

命令安装 xcode-select

sudo xcode-select --install

下载 xcode-select 安装

选择下载文件注意这里提示的版本号!

命令行安装速度很慢,且失败率很高,建议通过下载dmg文件安装

CMake 准备

编译OpenCV时要用到cmake。同样可以通过homebrew或者下载安装。

下载方式安装的CMake,cmake可执行程序在/Applications/CMake.app/Contents/bin/cmake.

如果你用的homebrew方式安装opencv那么CMake就不是必须的.

pkg-config 安装

编译引用有opencv库的c/c++代码需要附带很多参数来告知include path,libs等,用pkg-config就能精简编译参数。

brew install pkg-config

安装OpenCV

有两种方式安装。

brew install

## 一个命令安装好opencv3

brew install opencv3

安装好之后最好配置上这几个环境变量。(一般命令行会提示你)

export PATH="/usr/local/opt/[email protected]/bin:$PATH"

export LDFLAGS="-L/usr/local/opt/[email protected]/lib"

export CPPFLAGS="-I/usr/local/opt/[email protected]/include"

export PKG_CONFIG_PATH="/usr/local/opt/[email protected]/lib/pkgconfig"

用homebrew安装很方便,就是安装时间很长(我用了一个大白天)。额外还会安装python-opencv。

编译安装

点击下载源代码。这里我选择的是Sources 3.4.5

解压后,进入目录

cd

mkdir release

cd release

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local

make

sudo make install

这里创建的release目录会放cmake命令产生的成果。CMAKE_INSTALL_PREFIX配置的目录会存make命令产生的成果。

到这里如果都没报错就算安装成功了。

一般都不会出问题,在虚拟环境不一定能成功。

写个C++ Hello World

先写一个只引用了标准库的C++代码试试看。

/// ./main.cpp

#include

#include

int main(int argc, const char * argv[]) {

std::cout << "Hello, World!\n";

return 0;

}

结果如下。

没问题就继续尝试在代码引入OpenCV库。

pkg-config 环境配置

安装好后,配置一个环境变量就行了。

PKG_CONFIG_PATH="~/opencv解压目录/release/unix-install"

配置好之后在执行命令:

pkg-config opencv --libs --cflags opencv

显示内容大致如下,这块的内容就是opencv.pc里面的配置。

该环境变量就是为了让pkg-config能够找到opencv.pc这个文件。

写个OpenCV Demo

好,重点来了,大部分人会卡在这里

写个OpenCV HellowWorld来试试,打开一个空的VScode项目,创建

文件test.cpp

#include "opencv2/imgproc/imgproc.hpp"

#include "opencv2/highgui/highgui.hpp"

#include

#include

#include

using namespace std;

using namespace cv;

Mat src, dst, src_gray;

char* window_name = "Demo";

/**

* @主函数

*/

int main( int argc, char** argv )

{

/// 读取一副图片,不改变图片本身的颜色类型(该读取方式为DOS运行模式)

src = imread(argv[1], 1 );

/// 将图片转换成灰度图片

cvtColor(src, src_gray, CV_RGB2GRAY);

namedWindow(window_name, CV_WINDOW_AUTOSIZE);

imshow(window_name, src_gray);

while(true) {

int c;

c = waitKey(20);

if (27 == (char) c) {

break;

}

}

}

进入到命令行环境

## 编译测试程序

g++ `pkg-config opencv --libs --cflags opencv` ./test.cpp -o ./test.o

## 运行测试程序

./test.o ~/Downloads/opencv-logo.png

pkg-config 这条命令是为编译opencv测试代码引入类库。

能看到如下运行结果,恭喜你成功了。

可参考该链接最后: 编译自测程序

实际调试代码不停编译运行会敲很多命令,我们尝试把这些工作交给VScode。先为VScode安装一些插件

C/C++

C++ Intellisense

C++ Clang Command Adapter

在根目录下创建一个.vocode文件夹,再创建三个文件。

.vscode/launch.json

.vscode/tasks.json

.vscode/c_cpp_properties.json

文件.vscode/tasks.json

{

"tasks": [

{

"type": "shell",

"label": "g++ build active file",

"command": "/usr/bin/g++",

"args": [

"-g",

"${file}",

"-o",

"${fileDirname}/${fileBasenameNoExtension}.o",

"`pkg-config",

"--libs",

"--cflags",

"opencv`"

],

"options": {

"cwd": "/usr/bin"

},

"group": {

"kind": "build",

"isDefault": true

},

"problemMatcher": []

}

],

"version": "2.0.0"

}

文件.vscode/launch.json

{

// Use IntelliSense to learn about possible attributes.

// Hover to view descriptions of existing attributes.

// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387

"version": "0.2.0",

"configurations": [

{

"name": "g++ build and debug active file",

"type": "cppdbg",

"request": "launch",

"program": "${fileDirname}/${fileBasenameNoExtension}.o",

"args": [

"~/Downloads/opencv-logo.png"

],

"stopAtEntry": false,

"cwd": "${fileDirname}",

"environment": [

{"name": "PKG_CONFIG_PATH", "value": "opencv解压目录/release/unix-install"}, // 这是opencv解压码后创建的release目录下的unix-install, 要保证该目录下下有opencv.pc文件

{"name": "DYLD_LIBRARY_PATH", "value": "/usr/local/opencv/build/lib"} // 这个是你在编译时,opencv make时`CMAKE_INSTALL_PREFIX`指定的目录

// {"DYLD_LIBRARY_PATH": "/usr/local/opencv/build/lib"} // 这样的配置是错误的!

],

"externalConsole": true, // 这个开关打开表示,新开一个命令行窗口并运行程序。

"MIMode": "lldb",

"preLaunchTask": "g++ build active file" // 这一行的内容要和上一个文件`.vscode/tasks.json`的`tasks`->`label`字段的内容要一模一样!

}

]

}

文件.vscode/c_cpp_properties.json

{

"configurations": [

{

"name": "Mac",

"includePath": [

"/usr/local/include",

"/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include",

"/usr/local/opencv/include", // 这个是你在编译时,opencv make时`CMAKE_INSTALL_PREFIX`指定的目录

"${workspaceFolder}"

],

"browse": {

"limitSymbolsToIncludedHeaders": true,

"databaseFilename": "",

"path": [

"/usr/local/include",

"/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include",

"/usr/local/opencv/include", // 这个是你在编译时,opencv make时`CMAKE_INSTALL_PREFIX`指定的目录

"${workspaceFolder}"

]

},

"intelliSenseMode": "clang-x64",

"macFrameworkPath": [

"/System/Library/Frameworks",

"/Library/Frameworks"

],

"compilerPath": "/usr/bin/g++",

"cStandard": "c11",

"cppStandard": "c++17"

}

],

"version": 4

}

点击VScode菜单栏Debug > Start Debugging运行结果如下:

为了便于调试,我把launch.json的externalConsole设置为true,这样会在vscode之外新开一个终端运行程序,可能会弹框要授权,同意即可。

常见问题

pkg-config 配置不正确导致的报错

Package opencv was not found in the pkg-config search path.

Perhaps you should add the directory containing `opencv.pc'

to the PKG_CONFIG_PATH environment variable

No package 'opencv' found

test.cpp:1:10: fatal error: 'opencv2/imgproc/imgproc.hpp' file not found

#include "opencv2/imgproc/imgproc.hpp"

^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1 error generated.

[Finished in 0.4s with exit code 1]

解决方案:

运行一下命令添加一条path

export PKG_CONFIG_PATH="/opencv解压目录/release/unix-install":"$PKG_CONFIG_PATH"

dyld 包依赖问题

dyld: Library not loaded: @rpath/libopencv_dnn.3.4.dylib

Referenced from: ~/App/test

Reason: image not found

bash: line 1: 18912 Abort trap: 6 ~/App/test

[Finished in 1.0s with exit code 134]

解决方案:

if you want to solve error on terminal you can use export DYLD_LIBRARY_PATH=your/lib:$DYLD_LIBRARY_PATH if you want to solve error on Xcode in build page , go to "Runpath Search Paths" add you lib path

运行一下命令添加一条path

export DYLD_LIBRARY_PATH=/usr/include/opencv/build/lib:$DYLD_LIBRARY_PATH

遇到问题,欢迎留言

原文链接。不支持转载!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39956350/article/details/111448914

智能推荐

First 集和 Follow 集的构造_龙征天的博客-程序员宅基地

编译原理:First集和Follow集的构造

使用纯CSS实现点击轮播图效果,无js。_nightowl_wang的博客-程序员宅基地

使用纯CSS实现图片轮播效果首先我们来看一下所实现轮播图的最终效果:接下来为代码html+css代码部分:以下为HTML代码部分:&lt;!DOCTYPE html&gt;&lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;title&gt;轮播图&lt;/title&gt; &lt;link rel="stylesheet" href="css/banner.css"&gt; &lt;/head&gt; &lt;

Python使用Opencc库完成字符繁简体转换_python opencc官网_sjz_hahalala479的博客-程序员宅基地

背景在日常工作中,我们常常会遇到转换中文字符繁简体的情况。接下来,我该大家介绍一个很强大的Python库,用来方便的处理字符转换。OpenCC简介Opencc(Open Chinese Convert)是一个开源的中文繁简体转换项目,作者是目前任职于Google的BYVoid。详细信息请看官网(https://code.google.com/p/opencc)。OpenCC-Python安装Op

srp中使用Reflection Probe_wodownload2的博客-程序员宅基地

Reflection Probe——反射探针1、功能:用来反射天空盒或者反射某一个块的场景。2、表现:在物体上加入了周围场景的颜色。3、实现方式在场景的某个位置创建一个Reflection Probe调整好位置,ok此时如果有天空盒的话:则可以进行bake了:ok,这是bake天空盒。那么场景的物价也是可以bake的,只要把要bake的物价设置为:即可,连同物价一起bake。4、采样reflection probeTEXTURECUBE(unity_SpecCube0);

Objective-C高级编程_BassetHoud的博客-程序员宅基地

本书在苹果公司公开的源代码基础上,深入剖析了对应用于内存管理的ARC 以及应用于多线程开发的Blocks 和GCD。这些新技术看似简单,实则非常容易成为技术开发的陷阱,开发者仅靠阅读苹果公司的文档是不够的。本书适合有一定基础的iOS 开发者阅读。Kazuki Sakamoto日本资深软件工程师,具有17年开发经验。在StackOverflow上的威望值超过4500。著有《iOS 4编程基础》...

更改KSOA Tomcat startup.bat启动窗口名称_NO66781的博客-程序员宅基地

效果如下图:做法:1.找到F:\KSOAWS\tomcatSKKM\bin\catalina.bat文件并打开;2.修改如下:

随便推点

Eureka-项目介绍_eureka项目_FireflyBus的博客-程序员宅基地

1. 概述 本文主要分享 Eureka 的项目结构,附带部分简介和原理。 Eureka 项目地址:https://github.com/Netflix/eureka 1.1 简介 Eureka 是 Netflix 开源的服务注册发现组件,分成 Client 和 Server 两部分。简化架构如下图: Eureka-Server :通过 REST 协议暴露服务,提供应用服务的注册和发现...

计算天数(c语言)_7-8 计算天数_npmirai的博客-程序员宅基地

7-8 计算天数(15 分)本题要求编写程序计算某年某月某日是该年中的第几天。输入格式:输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。输出格式:在一行输出日期是该年中的第几天。输入样例1:2009/03/02输出样例1:

学习过程中的一些记录(动态页面,编程思想,面向对象的特性,原型链,如何把局部变量变成全局变量?)_用原型链存一个全局变量_TroubleZ的博客-程序员宅基地

(记录下在学习过程的几个知识点:)1.动态页面:页面由html+css+js向服务器发送请求,服务器那边没有页面,是动态生成的,返回给客户端。2.编程思想:面向过程:所有的事情都是亲力亲为注重的是过程。面向对象:提出需求,找对象,对象解决,注重的是结果。3.Javascript不是一门面向对象的语言,是基于对象的语言,js来模拟面向对象。4.面向对象的特性:封装,...

c语言实例--十进制转化为二进制_akon__ren的博客-程序员宅基地

问题:实现十进制转化为二进制的代码。思路先行:第一步:十进制转化为二进制的过程中,就是每次除2取余,并存放在数组中。第二步:输入的数字在0-32767之间。第三步:for循环(从0到14位,最高位为符号位)。第四步:for循环倒叙输出,存放在数组中即为转化后的值。第五步:为了美观,每隔四个数字打印一个空格。代码如下:#include &amp;lt;stdio.h&amp;gt; ...

由一个误操作引起的对linux下mv命令的使用总结_linux mv 中断_YunhaoLiu的博客-程序员宅基地

今天在使用mv命令移动文件时出现了一个小错误,我的目的是将jdk-8u65-linux-x64.tar.gz文件移动到/home/lyh/java目录下,正确的命令应该是这样的:sudo mv jdk-8u65-linux-x64.tar.gz /home/lyh/java然而由于我的疏忽大意,把命令写成了这样:sudo mv jdk-8u65-linux-x64.tar.gz java

ZZULIOJ-1025,最大字符(Java)_zzulioj1025_宋子浩的博客-程序员宅基地

题目描述:给你三个ASCII字符(不含空白字符:包括空格、制表符\t、回车换行符\n),找出其中最大的那个 。输入:输入包含三个字符,之间有一个空格隔开。输出:输出ASCII码最大的那个字符,占一行。 样例输入:a b c样例输出:c程序代码:import java.util.*;public class Ma...