2013-03-19 57 views
0

我正在尝试为opencv编写Gall和Lempitsky的Hough森林实现。如何通过Gall和Lempitsky编译opencv Hough森林实现

它可以从他们的网站here[mirrors]下载。

看起来它有问题找到opencv。我安装使用sudo apt-get install libopencv-dev opencv-doc OpenCV的2.3.1(或2.4.4我不知道)在Ubuntu,我可以编译和/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 

导致下面的输出:

[email protected]:~/Code/hough_forest$ make clean 
rm -f *.o *~ CRForest-Detector 
[email protected]:~/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' 
... 

回答

1

我已经manged用以下路径编译:

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 

请注意,我在OSX上,而不是Linux,但使用显式库文件的路径工作。需要注意的是在OSX编译库名为.dylib文件,同时在Linux上可能的.so或u和 路径略有不同,所以你可能想尝试这样的:

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 

UPDATE 我已经在虚拟机上安装了Ubuntu 12并编译了OpenCV 2.4。4从源代码,并注意到这一点:在/usr/local/include

  1. 安装OpenCV的头文件和库在/usr/local/lib默认情况下(在OSX等)
  2. 我跑进了确切的错误,因为你发布。我没有想到,因为我通过核心库定义了这些类。

主要问题似乎是编译库链接的顺序。我在this question and answer中发现了一些便利的细节。使用我已经更新了生成文件的这部分信息:

CRForest-Detector: $(OBJS) 
     $(CC) $(LIBDIRS) $(LIBS) -o [email protected] $+ $(OPT) 

像这样:

CRForest-Detector: $(OBJS) 
     $(CC) -o [email protected] $+ $(OPT) `pkg-config opencv --cflags --libs` 

这工作,我已经成功地编译在Ubuntu/Linux操作系统。

好消息是:make all工作 坏消息是:我从来没有使用pkg-config,但它似乎很好地输出正确的路径。即便如此,当我运行./CRForest-Detector时,发现一个错误,发现我不完全了解的opencv库。我猜你可以找到一些有用的建议herehere

结论:使用pkg-config选项,在make文件,因为这将是解决这一问题(编译应用程序)。

+0

嗯,我试过.so和.a文件,仍然不想去。我编辑我的问题与我有的opencv文件的输出。它看起来像我拥有我需要的一切吗?谢谢。 – waspinator 2013-03-20 01:34:59

+1

'LS的/ usr /本地/包含/ opencv'输出'cv.h \t \t \t cvaux.hpp cxcore.hpp \t highgui.h cv.hpp \t \t \t cvwimage.h cxeigen.hpp \t ml.h cvaux。 h \t \t cxcore.h \t cxmisc.h '这一切都很好。 'LIBS = /usr/lib/libopencv_core.so /usr/lib/libopencv_highgui.so/usr/lib/libopencv_imgproc.so'应该可以工作。请注意,它是完整的绝对路径,我不使用'-l'。我认为核心会有Mat/IplImage /等。类型,像imread/imwrite/imshow /等highui实用程序。和imgproc掩蔽和其他常见的过滤器。错误是否改变了?另外.... – 2013-03-20 11:54:52

+1

...我不确定它是否会有所作为,但我注意到大多数错误来自:'cvLoadImage'等,我认为它可能在核心库中。你可以尝试首先链接到libopencv_core.so? (您的原始链接列表('-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')开始与calib3d,所以我假定你抓着他们全部按字母顺序排列。)HTH – 2013-03-20 11:56:33

0

我一直在努力在Ubuntu机器上运行CRFOREST7个月。下面是一些建议:

的Makefile文件:

CRForest-Detector: $(OBJS) 
        $(CC) $(LIBDIRS) -o [email protected] $+$(OPT) $(LIBS) 

注:请把$(LIBS)结尾,否则,我会建议你重新安装下一个适当的在Ubuntu软件包的OpenCV配置指南。