编译OpenCV示例convert_cascade.cpp(OpenCV 2.3)

编译OpenCV示例convert_cascade.cpp(OpenCV 2.3),opencv,cascade,Opencv,Cascade,我正在Ubuntu 11.10上运行OpenCV 2.3.1。我可以毫无疑问地编译我自己编写的各种程序 不过,现在我已经完成了一半的Haar级联,需要将其组装到xml级联文件中。为此,我需要使用附带的示例程序convert_cascade.c。它不是默认编译的,所以我需要这样做 像这样运行gcc失败: gcc -lopencv_core -lopencv_highgui -lopencv_objdetect -I/usr/local/include/opencv/ -L/usr/local/li

我正在Ubuntu 11.10上运行OpenCV 2.3.1。我可以毫无疑问地编译我自己编写的各种程序

不过,现在我已经完成了一半的Haar级联,需要将其组装到xml级联文件中。为此,我需要使用附带的示例程序convert_cascade.c。它不是默认编译的,所以我需要这样做

像这样运行gcc失败:

gcc -lopencv_core -lopencv_highgui -lopencv_objdetect -I/usr/local/include/opencv/ -L/usr/local/lib/ convert_cascade.c -o convert_cascade
它给了我以下错误:

/tmp/cc5UddX6.o: In function `cvRound':
convert_cascade.c:(.text+0x19): undefined reference to `lrint'
/tmp/cc5UddX6.o: In function `cvDecRefData':
convert_cascade.c:(.text+0xb3b): undefined reference to `cvFree_'
convert_cascade.c:(.text+0xbac): undefined reference to `cvFree_'
/tmp/cc5UddX6.o: In function `cvGetRow':
convert_cascade.c:(.text+0xca2): undefined reference to `cvGetRows'
/tmp/cc5UddX6.o: In function `cvGetCol':
convert_cascade.c:(.text+0xccd): undefined reference to `cvGetCols'
/tmp/cc5UddX6.o: In function `cvReleaseMatND':
convert_cascade.c:(.text+0xce0): undefined reference to `cvReleaseMat'
/tmp/cc5UddX6.o: In function `cvSubS':
convert_cascade.c:(.text+0xe00): undefined reference to `cvAddS'
/tmp/cc5UddX6.o: In function `cvCloneSeq':
convert_cascade.c:(.text+0xe4e): undefined reference to `cvSeqSlice'
/tmp/cc5UddX6.o: In function `cvSetNew':
convert_cascade.c:(.text+0xead): undefined reference to `cvSetAdd'
/tmp/cc5UddX6.o: In function `cvGetSetElem':
convert_cascade.c:(.text+0xf40): undefined reference to `cvGetSeqElem'
/tmp/cc5UddX6.o: In function `cvEllipseBox':
convert_cascade.c:(.text+0x1040): undefined reference to `cvEllipse'
/tmp/cc5UddX6.o: In function `cvFont':
convert_cascade.c:(.text+0x1090): undefined reference to `cvInitFont'
/tmp/cc5UddX6.o: In function `cvReadIntByName':
convert_cascade.c:(.text+0x111e): undefined reference to `cvGetFileNodeByName'
/tmp/cc5UddX6.o: In function `cvReadRealByName':
convert_cascade.c:(.text+0x11af): undefined reference to `cvGetFileNodeByName'
/tmp/cc5UddX6.o: In function `cvReadStringByName':
convert_cascade.c:(.text+0x1209): undefined reference to `cvGetFileNodeByName'
/tmp/cc5UddX6.o: In function `cvReadByName':
convert_cascade.c:(.text+0x1239): undefined reference to `cvGetFileNodeByName'
convert_cascade.c:(.text+0x124f): undefined reference to `cvRead'
/tmp/cc5UddX6.o: In function `main':
convert_cascade.c:(.text+0x13b6): undefined reference to `cvLoadHaarClassifierCascade'
convert_cascade.c:(.text+0x1495): undefined reference to `cvSave'
collect2: ld returned 1 exit status
似乎所有缺失的函数都是旧的C风格的OpenCV函数,原型是在core_C.h.中实现的。但是包含(#include)并没有什么区别。我还尝试使用-lopencv_legacy标志进行编译(基本上只是猜测它可能与旧函数有关),但没有成功


我应该怎么做才能编译它?

不用担心。事实证明,为了启用TBB,我不得不重新编译OpenCV,所以我只给了CMAKE BUILD_EXAMPLES=ON命令,现在我已经将它编译成了一个版本。我很确定这不是正确的解决方案;-)

在/samples/c/目录中应该有一个build_all.sh脚本,它将为您生成所有示例;无需进行CMAKE调整。

这在mac上对我很有效。不过bash脚本看起来很普通。