gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:03:53 26 4
gpt4 key购买 nike

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

我正在尝试用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com