首页 > 解决方案 > 如何在覆盆子上链接 OpenCV 的正确目录?

问题描述

我按照本教程将 openCV 安装到了我的 Raspberry ,但文件进入了目录:usr/local/include/ opencv4/opencv2而不是 usr/local/include/ opencv2

现在编译失败,即使我使用 #include <opencv4/opencv2/opencv.hpp>

标签: c++opencv

解决方案


这有点令人困惑。在“旧”时代,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。


推荐阅读