如何在覆盆子上链接 OpenCV 的正确目录?

Posted

技术标签:

【中文标题】如何在覆盆子上链接 OpenCV 的正确目录?【英文标题】:How to link the correct directory for OpenCV on raspberry? 【发布时间】:2020-07-16 09:17:32 【问题描述】:

我按照tutorial 将 openCV 安装到了我的树莓派上,但文件进入了目录:usr/local/include/opencv4/opencv2 而不是 usr/local/include/opencv2

现在编译失败,即使我使用#include

【问题讨论】:

我建议您按照本教程重新安装。 pyimagesearch.com/2019/09/16/… 我看到遵循相同的步骤,认为我需要使用 C++ 版本,尽管 python 工作正常但 C++ 代码失败。建造过程也需要一个多小时,值得吗? 这个命令在终端pkg-config --modversion opencv或opencv4上的输出是什么 使用 opencv4 的输出是:4.2.0 你在控制台编译,对吧?如果是这样,您是否将代码与 OpenCV 的路径链接? (这是针对 C++ 的,因为正如您所说,它失败了) 【参考方案1】:

这有点令人困惑。在“旧”时代,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 这样的单个头文件。 请看下面的sn-p代码。

#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 上使用 OpenCV 4。在这里你会看到如何使用 C++ OpenCV。

【讨论】:

以上是关于如何在覆盆子上链接 OpenCV 的正确目录?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 上链接和编译 Raylib?

如何在 macOS 上链接 libc++?

如何在 Matlab 极轴上链接数据图像?

如何在Azure上链接docker容器?

无法在 qt creator 上的 c++ 上链接 realsense 库

如何使用cmake在mac上链接OpenGL相关库?