私はこれを 3 日間理解しようとしてきましたが、C++ はまったく初めてで、壁にぶつかったようです。
opencv のソース ファイルの 1 つ、特に bytefish によって記述された eigenfaces 関数を変更したいと考えています。1つではなく多くの顔を返すようにしたい。私はこの部分を理解したと信じています。
問題は、opencv を再コンパイルすると、使用する dll に関係なく、デモの顔認識コードをコンパイルするときに、いくつかのエラーが発生することです。
SET: IncDir = C:\opencv\build\include
$(INCDIR) = C:\opencv\build\include
SET: LibDir = C:\opencv\build\x86\mingw\lib
$(LIBDIR) = C:\opencv\build\x86\mingw\lib
g++ -I"C:\opencv\build\include" -L"C:\opencv\build\x86\mingw\lib" facerec_eigenfaces.cpp -lopencv_calib3d243 -lopencv_contrib243 -lopencv_core243 -lopencv_features2d243 -lopencv_flann243 -lopencv_gpu243 -lopencv_highgui243 -lopencv_imgproc243 -lopencv_legacy243 -lopencv_ml243 -lopencv_nonfree243 -lopencv_objdetect243 -lopencv_photo243 -lopencv_stitching243 -lopencv_video243 -lopencv_videostab243 -o facerec_eigenfaces
Process started >>>
C:\Users\Nate\AppData\Local\Temp\ccDRRGhr.o:facerec_eigenfaces.cpp:(.text+0x8a0): undefined reference to `cv::createEigenFaceRecognizer(int, double)'
C:\Users\Nate\AppData\Local\Temp\ccDRRGhr.o:facerec_eigenfaces.cpp:(.text+0xdf5): undefined reference to `cv::applyColorMap(cv::_InputArray const&, cv::_OutputArray const&, int)'
collect2: ld returned 1 exit status
<<< Process finished.
SET: Libs = -lopencv_calib3d243 -lopencv_contrib243 -lopencv_core243 -lopencv_features2d243 -lopencv_flann243 -lopencv_gpu243 -lopencv_highgui243 -lopencv_imgproc243 -lopencv_legacy243 -lopencv_ml243(...)
$(LIBS) = -lopencv_calib3d243 -lopencv_contrib243 -lopencv_core243 -lopencv_features2d243 -lopencv_flann243 -lopencv_gpu243 -lopencv_highgui243 -lopencv_imgproc243 -lopencv_legacy243 -lopencv_ml243 -lopen(...)
facerec_eigenfaces
私はいくつかの同様の問題を見て、そこにリストされているすべての方法を実装しようとしましたが、役に立ちませんでした。これは私の最初の C++ プロジェクトなので、基本的なものが欠けている可能性がありますが、すべての opencv ガイドを使用すると、contrib dll が正しくビルドされないようです。
ここに何か他のものを含める必要がある場合は、そうします。私はこれが嫌いです。
アップデート
私はそれのこの部分を機能させました。Visual Cでビルドされたdllファイルと非ビジュアルCでビルドされたファイルを混合して一致させているように見えますが、これは問題ではないと思いますが、コードは機能します。
基本的に、G++ と MinGW を使用してコンパイルするように構成された IDE として Notepad++ を使用していました。次に、いくつかのファイルをビジュアル C で変更し、それらを以前のプロジェクトに挿入しようとしました。次に、メモ帳++で再コンパイルすると、爆撃されました。
そのため、これを機能させるために、Visual C を唯一のエディターとして使用しました。OpenCV インストール ガイド (google) の指示に従ってビルドし、Visual C のみで変更を加えました。その後、Visual C でもコンパイルしました。
私は C++ の初心者なので、何が起こっているのかについてより良い回答が必要な場合は、ベストアンサーに投票します。