前回と同じような質問で、答えが見つかりませんでした。
私は重要だと考えていることに注意してください。通常、次のコマンドを使用して、opencvでプログラムをコンパイルします。
g++ -o def program.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`
この行は、名前がdefで、使用できる実行可能ファイルを作成します。
私はプロジェクトで作業していますが、プロジェクトが大きくなるにつれて、すべてを簡単に処理できるようにするために、いくつかのオブジェクトを定義する必要がありました。私はファイルから1つのオブジェクトを作成します:homogra.cppとhomogra.h私が使用したコマンドは次のとおりです。
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`
今まではすべてが正常に機能しています。
次に、2番目のオブジェクト(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`
現在は機能しておらず、セグメンターを認識していません。セグメンターが機能しているかどうかをすでに確認しました。homograがprogram.cppに含まれているのが唯一の場合は、すべて正常に機能します。
何かおかしなことに気づきました。行を変更して前に書いた場合、#include行に、#include "segmentator.h"、次に#include "homogra.h"、次にコンパイラー、コンパイル用の同じ行を使用します。
g++ -o def program.cpp homogra.o segmentator.o `pkg-config --cflags opencv` `pkg-config --libs opencv`
今回はセグメンテーションを認識しているだけで、ホモグラは認識していません。少しわかりにくいかもしれませんが、なるべくわかりやすく説明してみました。
助けて!?
よろしくお願いします。
これが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には、すべての典型的なインクルードと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.
}
image_reg.cppのインクルードリストで最初に読み取られるものとしてhomogra.hを許可すると、homogra.hのみが認識されます。最初の位置でセグメンターを許可すると、segmentator.hインスタンスのみが作成され、homograになります。hは認識されません。
ありがとう