0

今日、Visual Studio C++ 2010 で OpenCV を使用して Windows 用の「cvblobslib」をコンパイルしました。

コンパイルは成功し、「cvblobslib.lib」を取得します。

ここで引用する手順のように、プロジェクトで Visual C++ を設定して、このライブラリ (C++ の追加ディレクトリなど) を使用するようにライブラリの命令に従いました。

"1 - ライブラリのプロジェクトを開いてビルドします (OK、完了) 2 - ライブラリを使用する必要があるプロジェクトで、次を追加します。

2.1 「プロジェクト/設定/C++/プリプロセッサ/追加のインクルード ディレクトリ」に、ブロブ ライブラリが格納されているディレクトリを追加します (完了)。

2.2 "Project/Settings/Link/Input/Additional library path" に、BLOB ライブラリが保存されているディレクトリを追加し、"Object/Library modules" に cvblobslib.lib ファイルを追加します (どこで? Visual Studio フォルダーまたは私のプロジェクト内)。フォルダ?)

3- blob 変数を使用するファイル「BlobResult.h」をインクルードします (OK、完了)。

注: cvblobslib.lib が使用されているプロジェクトで、MFC ランタイム ライブラリが混在していないことを確認します。

  1. プロジェクトの「Project->Settings->C/C++->Code Generation->Use run-time library」にチェックインし、Debug Multithreaded DLL (debug version) または Multithreaded DLL (release version) に設定します。2 "Project->Settings->General" で MFC の使用方法を確認します。「共有DLLでMFCを使用する」である必要があります。(終わり)

このコードを使用すると、誰でも私を助けることができます:

#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv2\highgui\highgui.hpp>
#include <opencv\cxcore.h>
#include <stdio.h>
#include <conio.h>

// Main blob library include
#include "BlobResult.h"


using namespace std;
using namespace cv;


int main()
{

CBlobResult blobs;
int i;
CBlob *currentBlob;
IplImage *original,*originalThr,*displayedImage;

//carica immagine
original = cvLoadImage("pic6.png", CV_LOAD_IMAGE_GRAYSCALE);
cvThreshold(original,originalThr,100,255,CV_THRESH_BINARY);

//cerca le blob non bianche
blobs = CBlobResult(originalThr,NULL,255);

//le esclude quelle più piccole del parametro 2
blobs.Filter(blobs, B_EXCLUDE, CBlobGetArea(), B_LESS, 80);

//prende le parti grigie delle blob più grandi
CBlob biggestBlob;
CBlobGetMean getMeanColor(original);
double meanGray;

blobs.GetNthBlob(CBlobGetArea(), 0, biggestBlob);
meanGray = getMeanColor(biggestBlob);

//display it
cvMerge(originalThr,originalThr,originalThr,NULL, displayedImage);

for(i=0; i<blobs.GetNumBlobs();i++)
{
    currentBlob = blobs.GetBlob(i);
    currentBlob->FillBlob(displayedImage, CV_RGB(255,0,0));
}

return 0;

}

次のエラーが表示されます。

1>------ Inizio compilazione: Progetto: prova64, Configurazione: Debug x64 ------
1>Compilazione avviata 13/09/2013 15:31:44.
1>InitializeBuildStatus:
1>  Aggiornamento timestamp di "x64\Debug\prova64.unsuccessfulbuild".
1>ClCompile:
1>  Tutti gli output sono aggiornati.
1>ManifestResourceCompile:
1>  Tutti gli output sono aggiornati.
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: __cdecl CBlob::~CBlob(void)" (??1CBlob@@QEAA@XZ) non risolto nella funzione main
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: void __cdecl CBlob::FillBlob(struct _IplImage *,struct CvScalar,int,int)" (?FillBlob@CBlob@@QEAAXPEAU_IplImage@@UCvScalar@@HH@Z) non risolto nella funzione main
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: class CBlob * __cdecl CBlobResult::GetBlob(int)" (?GetBlob@CBlobResult@@QEAAPEAVCBlob@@H@Z) non risolto nella funzione main
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: void __cdecl CBlobResult::GetNthBlob(class COperadorBlob *,int,class CBlob &)const " (?GetNthBlob@CBlobResult@@QEBAXPEAVCOperadorBlob@@HAEAVCBlob@@@Z) non risolto nella funzione main
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: __cdecl CBlob::CBlob(void)" (??0CBlob@@QEAA@XZ) non risolto nella funzione main
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: void __cdecl CBlobResult::Filter(class CBlobResult &,int,class COperadorBlob *,int,double,double)" (?Filter@CBlobResult@@QEAAXAEAV1@HPEAVCOperadorBlob@@HNN@Z) non risolto nella funzione main
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: virtual __cdecl CBlobResult::~CBlobResult(void)" (??1CBlobResult@@UEAA@XZ) non risolto nella funzione main
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: class CBlobResult & __cdecl CBlobResult::operator=(class CBlobResult const &)" (??4CBlobResult@@QEAAAEAV0@AEBV0@@Z) non risolto nella funzione main
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: __cdecl CBlobResult::CBlobResult(struct _IplImage *,struct _IplImage *,unsigned char)" (??0CBlobResult@@QEAA@PEAU_IplImage@@0E@Z) non risolto nella funzione main
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: __cdecl CBlobResult::CBlobResult(void)" (??0CBlobResult@@QEAA@XZ) non risolto nella funzione main
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: double __cdecl CBlob::Mean(struct _IplImage *)" (?Mean@CBlob@@QEAANPEAU_IplImage@@@Z) non risolto nella funzione "public: virtual double __cdecl CBlobGetMean::operator()(class CBlob &)" (??RCBlobGetMean@@UEAANAEAVCBlob@@@Z)
1>testeblob.obj : error LNK2019: riferimento al simbolo esterno "public: double __cdecl CBlob::Area(void)" (?Area@CBlob@@QEAANXZ) non risolto nella funzione "public: virtual double __cdecl CBlobGetArea::operator()(class CBlob &)" (??RCBlobGetArea@@UEAANAEAVCBlob@@@Z)
1>C:\OPENCV\Test\Elabora64\prova64\x64\Debug\prova64.exe : fatal error LNK1120: 12 esterni non risolti
1>
1>Compilazione NON RIUSCITA.
1>
1>Tempo trascorso 00:00:00.81
========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========

「外部リンク エラー」が発生するのはなぜですか??

助けてください...どうしたらいいのかわからない...

4

1 に答える 1

2

64 ビットのcvblobslib.libへのパスを正しく設定する必要があります。

プロジェクト設定、構成プロパティに移動し、設定を見つけます。

  • リンカー -> 一般 -> 追加のライブラリ ディレクトリ
  • リンカー -> 入力 -> 追加の依存関係

ただし、cvblobslib プロジェクトが prova64 と同じソリューション内にある場合、これはより簡単です。この場合、プロジェクト参照を追加できます (prova64 プロジェクトを右クリックし、[参照...] をクリックして、cvblobslib プロジェクトを追加します)。

于 2013-09-19T05:18:00.957 に答える