c++ - 使用opencv编译头文件。自己的类定义

标签 c++ opencv compilation include header-files

我一直在寻找,但找不到可以解决我的疑问的东西。

我正在尝试用 C++ 定义我自己的类,我的类使用 opencv 中的库。

我创建了一个 file.h 文件,我只在其中声明函数及其守卫。

我创建了一个 file.cpp 文件,我在其中解释了函数的外观。在这个程序中,我使用了我将在普通 opencv 程序中使用的所有包含。 (我认为是对的)+ include file.h。

通常我会像这样编译我的 opencv 程序:

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

现在我尝试以相同的方式编译我的 file.cpp 以便在其他主文件中使用该类,但我得到了一个错误。

下一步,一旦我有编译类将是:

g++ -o programMain.cpp compiledClass.o `pkg-config --cflags opencv` `pkg-config --libs opencv`

任何帮助/建议都会很好,因为这是我第一次管理这么大的程序。

#ifndef _NAMES_H  
#define _NAMES_H     

class segmentator {
public:
      
   void search(Mat img,
               vector<std::vector<cv::Point> >&contours,
               vector<int>&similarity);
   
   void similar(vector<std::vector<cv::Point> >&contours,
                vector<std::vector<cv::Point> >&contours2,
                vector<int>&similarity);
   
   vector<Mat*> separate(Mat img,
                         Mat img2,
                         vector<std::vector<cv::Point> >&contours,
                         vector<std::vector<cv::Point> >& contours2,
                         vector<int> idx);
};

#endif

这是我的文件 segmentator.h。

在 segmentator.c 中我有:

#include <stdio.h>
#include <stdlib.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <sstream>
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "segmentator.h"

void segmentator::search(/*parameters*/){/*CODE*/}
void segmentator::similar(/*parameters*/){/*CODE*/}
vector<Mat*> separate(/*parameters*/){/*CODE*/}

然后我这样编译

g++ -o segmentator.cpp `pkg-config --cflags opencv`

并且它不识别 opencv 库的扩展。

我将问题与出现的新问题移动到:Not possible to compile. Headers files.Enclosed own objects definition

最佳答案

通常,您会先将 file.cpp 编译成目标文件:

g++ -c file.cpp pkg-config --cflags opencv

这会生成 file.o,然后您可以使用它来编译和链接主程序:

g++ programMain.cpp file.o -o programMain pkg-config --cflags opencv pkg-config --libs opencv

您应该将 file.h 中的包含限制为您严格需要的那些。 file.cpp 也是如此。

编辑:查看您的代码,您需要执行以下操作:

  • segmentator.h 中包含 cv::Matcv::Point 的 header 。我假设这些将是 opencv2/core/core.hpp 虽然对我来说 opencv/cv.h 在 OpenCV 2.3.1 上很好。
  • segmantator.h 中包含 header vector
  • 如果您的 segmentator.c 包含一个 main 函数,您需要链接到 OpenCV 库中,所以

    g++ segmentator.cpp -o segmentator pkg-config --cflags opencv pkg-config --libs opencv

  • 如果您的 segmentator.c 没有 main,即不能成为可执行文件,您可以将其编译成一个目标文件,您可以使用稍后构建应用程序:

    g++ -c segmentator.cpp pkg-config --cflags opencv

关于c++ - 使用opencv编译头文件。自己的类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10717178/

相关文章:

python - 如何使用 python opencv 拟合图像中的感兴趣区域以保持纵横比?

python - 如何在网络摄像头提要上覆盖 png?

在链接之前检查头文件中的所有函数是否都在 c 文件中实现

c++ - 如何将 boost::bind 与不可复制的参数一起使用,例如 boost::promise?

c++ - 使用表达式参数专门化模板

C++ read()-ing 从套接字到 ofstream

java - 使用opencv java检测图像中文档的边界

go - 完成后,运行/ vert / build /测试命令挂起。忽略中断信号

c++ - FFMPEG 编译自定义

c++ - 为什么 GCC 将对全局实例的构造函数的调用放入不同的部分(取决于目标)?