使用 OpenCV 编译头文件.自己的类定义



我一直在寻找,但找不到一些明确的东西。

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

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

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

通常我编译我的opencv程序,如下所示:

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

现在我尝试编译我的文件.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.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库的扩展。

我用新问题移动了问题,似乎:无法编译。头文件。封闭的自己的对象定义

通常,您首先将 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 的标头。我认为这些会opencv2/core/core.hpp尽管对我来说opencv/cv.h OpenCV 2.3.1 上很好。
  • segmantator.h中包含标头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

最新更新