在这里,我有一个类似的问题作为最后的时间,和我找不到任何答案。
请注意,我认为重要的是:通常情况下我编译我的程序与下一个命令的OpenCV:
g++ -o def program.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`
这条线将创建一个可执行文件的名字将是高清和我将能够使用。
我在一个项目中工作,并且因为它是挺大的,我不得不定义一些对象,只是为了使一切更容易,可能处理。 我创建了一个文件对象:homogra.cpp和homogra.h我用它的COMAND是:
g++ -c homogra.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`
然后,我在写program.cpp行的#include“homogra.h”
我喜欢编译:
g++ -o def program.cpp homogra.o `pkg-config --cflags opencv` `pkg-config --libs opencv`
到现在为止一切工作正常。
然后,我创建第二个对象(具有相同的编译行作为homogra,但这次segmentator.cpp和segmentator.h),我写了线的#include“segmentator.h”,(在program.cpp)和我编译喜欢:
g++ -o def program.cpp .o segmentator.o `pkg-config --cflags opencv` `pkg-config --libs opencv`
现在,它不工作,这是不承认segmentator。 我检查,如果已经被segmentator工作,如果homogra是唯一包含在program.cpp一切工作正常。
我注意到一些奇怪的事情。 如果我改变了线,我写之前,在行#include,#包括“segmentator.h”,然后#包括“homogra.h”,那么编译器,以编译在同一行:
g++ -o def program.cpp homogra.o segmentator.o `pkg-config --cflags opencv` `pkg-config --libs opencv`
只有认识到这一点时segmentator而不是homogra。 这也许有点难以理解,我试图解释它尽可能好。
任何帮助!
提前谢谢了。
这里是homogra.h:
using namespace cv;
using namespace std;
#ifndef _NAMES_H
#define _NAMES_H
class homogra {
public:
Mat matCalculation( Mat img, Mat img2);
void printMatrix(Mat matrix);
};
#endif
在homogra.cpp我所有的tipical包括和homogra.h:
#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 "homogra.h"
然后是功能解释。
对象2是segmentator.h
using namespace cv;
using namespace std;
#ifndef _NAMES_H
#define _NAMES_H
class segmentator {
public:
void search(Mat img,vector<std::vector<cv::Point> >& contours);
void similar(vector<std::vector<cv::Point> >& contours,vector<std::vector<cv::Point> >& contours2,vector<int>& idx);
vector<Mat> separate(Mat img,Mat img2,vector<std::vector<cv::Point> >& contours,vector<std::vector<cv::Point> >& contours2,vector<int> idx);
};
#endif
而在segmentator.cpp我又都是一样的包括,除了homogra.h和,而不是这个我有segmentator.h。
Program.cpp是image_reg.cpp:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "homogra.h"
#include "segmentator.h"
using namespace cv;
using namespace std;
int main(int argc, char ** argv )
{ //Here is the code where I try to invoque two instances of homogra and segmentator.
}
如果我让homogra.h作为第一个被读取的包括image_reg.cpp的名单,然后只homogra.h是公认的,如果我让在第一位置segmentator,那么只有segmentator.h将被创建和homogra实例。 ^ h将无法识别。
谢谢