0

opencv用に書かれたGallとLempitskyのHough forest実装をコンパイルしようとしています。

こちらの Web サイト [mirrors]からダウンロードできます。

opencv の検索に問題があるようです。使用してubuntuにopencv 2.3.1(または2.4.4はわかりません)をインストールしsudo apt-get install libopencv-dev opencv-doc、サンプルをコンパイルして実行できます/usr/share/doc/opencv-doc/examples

make ファイルのパスを次のように変更しました。

# change paths if necessary
# INCLUDES = -I/usr/pack/opencv-1.0.0-dr/amd64-debian-linux4.0/include/opencv
# LIBS = -lcxcore -lcv -lcvaux -lhighgui -lml
# LIBDIRS = -L/usr/pack/opencv-1.0.0-dr/amd64-debian-linux4.0/lib

INCLUDES = -I/usr/include/opencv
LIBS = -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_ts -lopencv_video -lopencv_videostab
LIBDIRS = -L/usr/lib

実行時に発生するエラーは次のmake allとおりです。

g++ -c -I/usr/include/opencv CRForest-Detector.cpp -O3 -Wno-deprecated
CRForest-Detector.cpp: In function ‘void run_train()’:
CRForest-Detector.cpp:543:27: warning: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result [-Wunused-result]
CRForest-Detector.cpp: In function ‘void run_detect()’:
CRForest-Detector.cpp:521:27: warning: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result [-Wunused-result]
g++ -c -I/usr/include/opencv CRPatch.cpp -O3 -Wno-deprecated
g++ -c -I/usr/include/opencv HoG.cpp -O3 -Wno-deprecated
g++ -c -I/usr/include/opencv CRForestDetector.cpp -O3 -Wno-deprecated
g++ -c -I/usr/include/opencv CRTree.cpp -O3 -Wno-deprecated
g++ -L/usr/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_ts -lopencv_video -lopencv_videostab -o CRForest-Detector CRForest-Detector.o CRPatch.o HoG.o CRForestDetector.o CRTree.o -O3 -Wno-deprecated
CRForest-Detector.o: In function `detect(CRForestDetector&)':
CRForest-Detector.cpp:(.text+0x3340): undefined reference to `cvLoadImage'
CRForest-Detector.cpp:(.text+0x34a3): undefined reference to `cvCreateImage'
CRForest-Detector.cpp:(.text+0x357b): undefined reference to `cvCreateImage'
CRForest-Detector.cpp:(.text+0x35d9): undefined reference to `cvConvertScale'
CRForest-Detector.cpp:(.text+0x3620): undefined reference to `cvSaveImage'
CRForest-Detector.cpp:(.text+0x3634): undefined reference to `cvReleaseImage'
...

g++ が必要なライブラリを認識できるようにするには、何を変更する必要がありますか? 必要なライブラリがインストールされているかどうかを確認するにはどうすればよいですか?


編集:

これは次の出力ですpkg-config --modversion opencv: 2.4.4

これはの出力です/usr/lib$ ls | grep "opencv"

libopencv_calib3d.a
libopencv_calib3d.so
libopencv_calib3d.so.2.3
libopencv_calib3d.so.2.3.1
libopencv_contrib.a
libopencv_contrib.so
libopencv_contrib.so.2.3
libopencv_contrib.so.2.3.1
libopencv_core.a
libopencv_core.so
libopencv_core.so.2.3
libopencv_core.so.2.3.1
libopencv_features2d.a
libopencv_features2d.so
libopencv_features2d.so.2.3
libopencv_features2d.so.2.3.1
libopencv_flann.a
libopencv_flann.so
libopencv_flann.so.2.3
libopencv_flann.so.2.3.1
libopencv_gpu.a
libopencv_gpu.so
libopencv_gpu.so.2.3
libopencv_gpu.so.2.3.1
libopencv_highgui.a
libopencv_highgui.so
libopencv_highgui.so.2.3
libopencv_highgui.so.2.3.1
libopencv_imgproc.a
libopencv_imgproc.so
libopencv_imgproc.so.2.3
libopencv_imgproc.so.2.3.1
libopencv_legacy.a
libopencv_legacy.so
libopencv_legacy.so.2.3
libopencv_legacy.so.2.3.1
libopencv_ml.a
libopencv_ml.so
libopencv_ml.so.2.3
libopencv_ml.so.2.3.1
libopencv_objdetect.a
libopencv_objdetect.so
libopencv_objdetect.so.2.3
libopencv_objdetect.so.2.3.1
libopencv_video.a
libopencv_video.so
libopencv_video.so.2.3
libopencv_video.so.2.3.1

との出力/usr/include/opencv$ ls | grep ''

cvaux.h
cvaux.hpp
cv.h
cv.hpp
cvwimage.h
cxcore.h
cxcore.hpp
cxeigen.hpp
cxmisc.h
highgui.h
ml.h

ここに必要なすべてのファイルがありますか、それとも何か不足していますか?


編集2:

提案されているように、インクルードとライブラリを次のように変更しました。

INCLUDES = -I/usr/include/opencv
LIBS = /usr/lib/libopencv_core.so /usr/lib/libopencv_highgui.so /usr/lib/libopencv_imgproc.so
LIBDIRS = -L/usr/lib

次の出力が得られます。

user@user:~/Code/hough_forest$ make clean
rm -f *.o *~ CRForest-Detector
user@user:~/Code/hough_forest$ make all
g++ -c -I/usr/include/opencv CRForest-Detector.cpp -O3 -Wno-deprecated
CRForest-Detector.cpp: In function ‘void run_train()’:
CRForest-Detector.cpp:543:27: warning: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result [-Wunused-result]
CRForest-Detector.cpp: In function ‘void run_detect()’:
CRForest-Detector.cpp:521:27: warning: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result [-Wunused-result]
g++ -c -I/usr/include/opencv CRPatch.cpp -O3 -Wno-deprecated
g++ -c -I/usr/include/opencv HoG.cpp -O3 -Wno-deprecated
g++ -c -I/usr/include/opencv CRForestDetector.cpp -O3 -Wno-deprecated
g++ -c -I/usr/include/opencv CRTree.cpp -O3 -Wno-deprecated
g++ -L/usr/lib /usr/lib/libopencv_core.so /usr/lib/libopencv_highgui.so /usr/lib/libopencv_imgproc.so -o CRForest-Detector CRForest-Detector.o CRPatch.o HoG.o CRForestDetector.o CRTree.o -O3 -Wno-deprecated
CRForest-Detector.o: In function `detect(CRForestDetector&)':
CRForest-Detector.cpp:(.text+0x3a87): undefined reference to `cvLoadImage'
CRForest-Detector.cpp:(.text+0x3b9e): undefined reference to `cvCreateImage'
CRForest-Detector.cpp:(.text+0x3c61): undefined reference to `cvCreateImage'
CRForest-Detector.cpp:(.text+0x3cae): undefined reference to `cvConvertScale'
CRForest-Detector.cpp:(.text+0x3d03): undefined reference to `cvSaveImage'
CRForest-Detector.cpp:(.text+0x3d12): undefined reference to `cvReleaseImage'
CRForest-Detector.cpp:(.text+0x3d39): undefined reference to `cvReleaseImage'
CRForest-Detector.cpp:(.text+0x3d67): undefined reference to `cvReleaseImage'
...
4

2 に答える 2

1

私は次のパスでコンパイルするように管理しました:

INCLUDES = -I/usr/local/include/opencv
LIBS = /usr/local/lib/libopencv_core.dylib /usr/local/lib/libopencv_highgui.dylib /usr/local/lib/libopencv_imgproc.dylib
LIBDIRS = -L/usr/local/lib

私はLinuxではなくOSXを使用していますが、明示的なライブラリファイルへのパスを使用すると機能することに注意してください。osxではコンパイルされたライブラリは.dylibファイルですが、Linuxではおそらく.soまたは.aであり、パスがわずかに異なるため、次のようなものを試してみてください。

INCLUDES = -I/usr/include/opencv
LIBS = /usr/lib/libopencv_core.so /usr/lib/libopencv_highgui.so /usr/lib/libopencv_imgproc.so
LIBDIRS = -L/usr/lib

更新 私は仮想マシンにUbuntu12をインストールし、ソースからOpenCV 2.4.4をコンパイルし、これに気づきました。

  1. OpenCVはデフォルトでヘッダー/usr/local/includeとライブラリをインストールしました(OSXのように)/usr/local/lib
  2. あなたが投稿したときに私は正確なエラーに遭遇しました。それらのクラスはコアライブラリで定義されているので、私はそれを期待していませんでした。

主な問題は、コンパイルされたライブラリがリンクされる順序にある​​ようです。私はこの質問と回答でいくつかの便利な詳細を見つけました。makefileのこの部分を更新した情報を使用して:

CRForest-Detector: $(OBJS)
        $(CC) $(LIBDIRS) $(LIBS) -o $@ $+ $(OPT)

そのようです:

CRForest-Detector: $(OBJS)
        $(CC) -o $@ $+ $(OPT) `pkg-config opencv --cflags --libs`

これはうまくいき、Ubuntu/Linuxでコンパイルすることができました。

良いニュースは:make allうまくいった悪いニュースは:私はこれまでpkg-configを使ったことがないが、正しいパスをうまく出力しているようだ。それでも、./ CRForest-Detectorを実行すると、完全には理解していないopencvライブラリを見つけるときにエラーが発生します。ここここで役立つアドバイスが見つかると思います

結論:pkg-configこれがこの問題の解決策になるため、makeファイルのオプションを使用します(アプリケーションのコンパイル)。

于 2013-03-19T20:58:02.550 に答える
0

私は 7 か月間、Ubuntu マシンで CRFOREST を実行することに取り組んできました。以下にいくつかの提案を示します。

Makefile の場合:

 CRForest-Detector: $(OBJS)
                    $(CC) $(LIBDIRS) -o $@ $+$(OPT) $(LIBS)

注: $(LIBS) を最後に付けてください。それ以外の場合は、適切な構成ガイドに従って、Ubuntu にパッケージ opencv を再インストールすることをお勧めします。

于 2013-04-16T02:21:22.127 に答える