c++ - 如何在覆盆子上链接 OpenCV 的正确目录?
问题描述
我按照本教程将 openCV 安装到了我的 Raspberry ,但文件进入了目录:usr/local/include/ opencv4/opencv2而不是 usr/local/include/ opencv2
现在编译失败,即使我使用 #include <opencv4/opencv2/opencv.hpp>
解决方案
这有点令人困惑。在“旧”时代,OpenCV 将其目录默认放置在 /usr/local/inculde/opencv2 目录中。但是,随着自 OpenCV 4 以来的主要版本更改,当您在同一台机器上安装 OpenCV 2 和 4 时,它会产生很多潜在的冲突。为了克服这个问题,OpenCV 现在将头文件默认放置在 opencv4 文件夹中。
您现在可以选择您想要的版本(当然,如果您都安装了):
#include /usr/local/include
哪个将指向“旧”版本 2,或者
#include /usr/local/include/opencv4
哪个指向版本 4。
大多数情况下,您不包含诸如 opencv.hpp 之类的单个标头。请看下面的代码片段。
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
int main(int argc,char ** argv)
{
VideoCapture cap(0);
if (!cap.isOpened()) {
cerr << "ERROR: Unable to open the camera" << endl;
return 0;
}
Mat frame;
cout << "Start grabbing, press a key on Live window to terminate" << endl;
while(1) {
cap >> frame;
if (frame.empty()) {
cerr << "ERROR: Unable to grab from the camera" << endl;
break;
}
imshow("Live",frame);
int key = cv::waitKey(20);
key = (key==255) ? -1 : key;
if (key>=0) break;
}
cout << "Closing the camera" << endl;
cap.release();
destroyAllWindows();
return 0;
}
在编译期间,您只需提供一次位置。这是 Code::Block 项目文件的一部分。使用的机制是明确的;只需提供一次您的中心位置。
此外,通过链接整个包,您不必将单个目标文件与令人沮丧的相互依赖关系链接起来。
<Compiler>
<Add option="-Wall" />
<Add option="-fexceptions" />
<Add directory="/usr/local/include/opencv4" />
</Compiler>
<Linker>
<Add option="`pkg-config --libs --cflags opencv4`" />
</Linker>
我已经在GitHub上的 Raspberry Pi 上放置了一些(深度学习)示例,说明如何在 Raspberry Pi 上使用 OpenCV 4 。在这里,您将了解如何使用 C++ OpenCV。
推荐阅读
- r - 如何使用 Lubridate 将日期格式化为“YYYY-Mon”?
- swift - 从自定义 @IBDesignable UITextField 类控制占位符文本颜色。斯威夫特 4.2,Xcode 10
- mysql - MySQL案例造就新专栏
- git - 如何在 Visual Studio Code 甚至命令行中更改 git 用户?(对 user1 的权限被拒绝,请求的 URL 返回错误:403)
- r - 为大列表的每个元素自动在大列表中创建向量的功能
- node.js - 错误阻止捆绑:使用 ecmascript 处理文件时(针对目标 web.browser):
- c# - 插入包含字符串的变量作为新列表c#的参数
- angular - 如何从角度的承诺中获取网址?
- rust - 对超出函数的局部 Arc 的引用
- android - 取消暂停通知