技术标签: 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
遇到问题,欢迎留言
原文链接。不支持转载!
编译原理:First集和Follow集的构造
使用纯CSS实现图片轮播效果首先我们来看一下所实现轮播图的最终效果:接下来为代码html+css代码部分:以下为HTML代码部分:<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>轮播图</title> <link rel="stylesheet" href="css/banner.css"> </head> <
背景在日常工作中,我们常常会遇到转换中文字符繁简体的情况。接下来,我该大家介绍一个很强大的Python库,用来方便的处理字符转换。OpenCC简介Opencc(Open Chinese Convert)是一个开源的中文繁简体转换项目,作者是目前任职于Google的BYVoid。详细信息请看官网(https://code.google.com/p/opencc)。OpenCC-Python安装Op
Reflection Probe——反射探针1、功能:用来反射天空盒或者反射某一个块的场景。2、表现:在物体上加入了周围场景的颜色。3、实现方式在场景的某个位置创建一个Reflection Probe调整好位置,ok此时如果有天空盒的话:则可以进行bake了:ok,这是bake天空盒。那么场景的物价也是可以bake的,只要把要bake的物价设置为:即可,连同物价一起bake。4、采样reflection probeTEXTURECUBE(unity_SpecCube0);
本书在苹果公司公开的源代码基础上,深入剖析了对应用于内存管理的ARC 以及应用于多线程开发的Blocks 和GCD。这些新技术看似简单,实则非常容易成为技术开发的陷阱,开发者仅靠阅读苹果公司的文档是不够的。本书适合有一定基础的iOS 开发者阅读。Kazuki Sakamoto日本资深软件工程师,具有17年开发经验。在StackOverflow上的威望值超过4500。著有《iOS 4编程基础》...
效果如下图:做法:1.找到F:\KSOAWS\tomcatSKKM\bin\catalina.bat文件并打开;2.修改如下:
1. 概述 本文主要分享 Eureka 的项目结构,附带部分简介和原理。 Eureka 项目地址:https://github.com/Netflix/eureka 1.1 简介 Eureka 是 Netflix 开源的服务注册发现组件,分成 Client 和 Server 两部分。简化架构如下图: Eureka-Server :通过 REST 协议暴露服务,提供应用服务的注册和发现...
7-8 计算天数(15 分)本题要求编写程序计算某年某月某日是该年中的第几天。输入格式:输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。输出格式:在一行输出日期是该年中的第几天。输入样例1:2009/03/02输出样例1:
(记录下在学习过程的几个知识点:)1.动态页面:页面由html+css+js向服务器发送请求,服务器那边没有页面,是动态生成的,返回给客户端。2.编程思想:面向过程:所有的事情都是亲力亲为注重的是过程。面向对象:提出需求,找对象,对象解决,注重的是结果。3.Javascript不是一门面向对象的语言,是基于对象的语言,js来模拟面向对象。4.面向对象的特性:封装,...
问题:实现十进制转化为二进制的代码。思路先行:第一步:十进制转化为二进制的过程中,就是每次除2取余,并存放在数组中。第二步:输入的数字在0-32767之间。第三步:for循环(从0到14位,最高位为符号位)。第四步:for循环倒叙输出,存放在数组中即为转化后的值。第五步:为了美观,每隔四个数字打印一个空格。代码如下:#include &lt;stdio.h&gt; ...
今天在使用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
题目描述:给你三个ASCII字符(不含空白字符:包括空格、制表符\t、回车换行符\n),找出其中最大的那个 。输入:输入包含三个字符,之间有一个空格隔开。输出:输出ASCII码最大的那个字符,占一行。 样例输入:a b c样例输出:c程序代码:import java.util.*;public class Ma...