2011-03-12 29 views
1

我正试图在Mac上集成opencv2.2库与Qt4.7创建者并且遇到问题。其中大部分我已经在一定程度上解决了。 我下载了opencv2.2 tar.gz库,并将其解压到我的home文件夹下的一个子目录中,使用CMake编译它,使用下面的this guide来使用静态库。 (我未选中的BUILD_SHARED_LIBRARIES和USE_OMIT_FRAME_POINTER并检查了QT的选项)如何在OSX 10.6.6中将opencv2.2与Qt4.7集成?

我现在的.pro文件目前的样子:

TARGET = openCVTst1 
TEMPLATE = app 
SOURCES += main.cpp\ 
     mainwindow.cpp 

INCLUDEPATH += /opt/local/include /usr/local/include 

LIBS += -L/opt/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_features2d \ 
     -lopencv_flann -lopencv_gpu -lopencv_imgproc -lopencv_ml \ 
     -lopencv_objdetect -lopencv_video -lopencv_highgui -lopencv_core 

HEADERS += mainwindow.h 
FORMS += mainwindow.ui 

我现在已经简化我的测试,只是用:

#include <QtGui/QApplication> 
#include "mainwindow.h" 
#include <opencv/cv.h> 
#include <opencv/highgui.h> 

int main(int argc, char *argv[]) 
{ 
QApplication a(argc, argv); 
//MainWindow w; 
//w.show(); 
cvNamedWindow("My Window", 1); 
IplImage *img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); 
CvFont font; 
double hScale = 1.0; 
double vScale = 1.0; 
int lineWidth = 1; 
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX | CV_FONT_ITALIC, 
hScale, vScale, 0, lineWidth); 
cvPutText(img, "Hello World!", cvPoint(200, 400), &font, 
cvScalar(255, 255, 0)); 
cvShowImage("My Window", img); 
cvWaitKey(); 
return a.exec(); 
} 

在main.cpp中,我仍然得到相同的错误。我的编译器输出:

Running build steps for project openCVTst1... 
Configuration unchanged, skipping qmake step. 
Starting: "/usr/bin/make" -w 
make: Entering directory `/Users/Inprimus/devProjects/openCVTst1-build-desktop' 
/usr/bin/qmake -spec /usr/local/Qt4.7/mkspecs/macx-g++ -o Makefile ../openCVTst1/openCVTst1.pro 
make: Leaving directory `/Users/Inprimus/devProjects/openCVTst1-build-desktop' 
make: Entering directory `/Users/Inprimus/devProjects/openCVTst1-build-desktop' 
g++ -headerpad_max_install_names -o openCVTst1.app/Contents/MacOS/openCVTst1 main.o mainwindow.o moc_mainwindow.o -F/Library/Frameworks -L/Library/Frameworks -L/opt/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_video -lopencv_highgui -lopencv_core -framework QtGui -L/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/lib -F/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/lib -framework QtCore 
ld: warning: directory '/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/lib' following -L not found 
ld: warning: directory '/tmp/qt-stuff-6474/source/qt-everywhere-opensource-src-4.7.0/lib' following -F not found 
Undefined symbols: 
    "QGLFormat::~QGLFormat()", referenced from: 
     ViewPort::ViewPort(CvWindow*, int, int)in libopencv_highgui.a(window_QT.o) 
     ViewPort::ViewPort(CvWindow*, int, int)in libopencv_highgui.a(window_QT.o) 
    "_glPushMatrix", referenced from: 
     ViewPort::setGL(int, int)in libopencv_highgui.a(window_QT.o) 
     ViewPort::setGL(int, int)in libopencv_highgui.a(window_QT.o) 
    "_gzclose", referenced from: 
     _cvReleaseFileStorage in libopencv_core.a(persistence.o) 
     _cvOpenFileStorage in libopencv_core.a(persistence.o) 
     _cvOpenFileStorage in libopencv_core.a(persistence.o) 
    "_glMatrixMode", referenced from: 
     ViewPort::unsetGL()  in libopencv_highgui.a(window_QT.o) 
     ViewPort::setGL(int, int)in libopencv_highgui.a(window_QT.o) 
     ViewPort::setGL(int, int)in libopencv_highgui.a(window_QT.o) 
     ViewPort::paintEvent(QPaintEvent*)  in libopencv_highgui.a(window_QT.o) 
    "_glShadeModel", referenced from: 
     ViewPort::initGL()  in libopencv_highgui.a(window_QT.o) 
     ViewPort::ViewPort(CvWindow*, int, int)in libopencv_highgui.a(window_QT.o) 
    "_gzrewind", referenced from: 
     icvRewind(CvFileStorage*)  in libopencv_core.a(persistence.o) 
    "_glEnable", referenced from: 
     ViewPort::initGL()  in libopencv_highgui.a(window_QT.o) 
     ViewPort::initGL()  in libopencv_highgui.a(window_QT.o) 
     ViewPort::initGL()  in libopencv_highgui.a(window_QT.o) 
     ViewPort::ViewPort(CvWindow*, int, int)in libopencv_highgui.a(window_QT.o) 
     ViewPort::ViewPort(CvWindow*, int, int)in libopencv_highgui.a(window_QT.o) 
     ViewPort::ViewPort(CvWindow*, int, int)in libopencv_highgui.a(window_QT.o) 
    "QGLWidget::QGLWidget(QGLFormat const&, QWidget*, QGLWidget const*, QFlags<Qt::WindowType>)", referenced from: 
     ViewPort::ViewPort(CvWindow*, int, int)in libopencv_highgui.a(window_QT.o) 
    "QGLFormat::QGLFormat(QFlags<QGL::FormatOption>, int)", referenced from: 
     ViewPort::ViewPort(CvWindow*, int, int)in libopencv_highgui.a(window_QT.o) 
    "_glHint", referenced from: 
     ViewPort::initGL()  in libopencv_highgui.a(window_QT.o) 
     ViewPort::ViewPort(CvWindow*, int, int)in libopencv_highgui.a(window_QT.o) 
    "_gzgets", referenced from: 
     icvGets(CvFileStorage*, char*, int)in libopencv_core.a(persistence.o) 
    "_glPopMatrix", referenced from: 
     ViewPort::unsetGL()  in libopencv_highgui.a(window_QT.o) 
     ViewPort::unsetGL()  in libopencv_highgui.a(window_QT.o) 
     ViewPort::paintEvent(QPaintEvent*)  in libopencv_highgui.a(window_QT.o) 
     ViewPort::paintEvent(QPaintEvent*)  in libopencv_highgui.a(window_QT.o) 
    "_glFrustum", referenced from: 
     ViewPort::icvgluPerspective(double, double, double, double)in libopencv_highgui.a(window_QT.o) 
     ViewPort::setGL(int, int)in libopencv_highgui.a(window_QT.o) 
    "_gzeof", referenced from: 
     icvEof(CvFileStorage*)  in libopencv_core.a(persistence.o) 
    "_glLoadIdentity", referenced from: 
     ViewPort::setGL(int, int)in libopencv_highgui.a(window_QT.o) 
     ViewPort::setGL(int, int)in libopencv_highgui.a(window_QT.o) 
    "QGLWidget::grabFrameBuffer(bool)", referenced from: 
     ViewPort::saveView()  in libopencv_highgui.a(window_QT.o) 
    "_gzopen", referenced from: 
     _cvOpenFileStorage in libopencv_core.a(persistence.o) 
    "_gzputs", referenced from: 
     icvPuts(CvFileStorage*, char const*)in libopencv_core.a(persistence.o) 
make: Leaving directory `/Users/Inprimus/devProjects/openCVTst1-build-desktop' 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
make: *** [openCVTst1.app/Contents/MacOS/openCVTst1] Error 1 
The process "/usr/bin/make" exited with code %2. 
Error while building project openCVTst1 (target: Desktop) 
When executing build step 'Make' 

很抱歉的长期编辑

回答

2

您还需要告诉Qt Creator的用OpenCV的库链接:

LIBS += -L/opt/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_video -lopencv_highgui -lopencv_core 

您只需提供您实际需要的库。您提供这些库的顺序很重要(我不确定是否正确)。

如果lib2取决于lib1,则需要做-llib2 -llib1

如果仍然出现错误,请考虑发布可在compiler output选项卡(CMD-4)下的Qt Creator中找到的错误消息。

编辑: 添加

QT += opengl 

你的.pro文件应该可以解决这个问题。有关更多信息,请参见http://doc.qt.nokia.com/4.7/qtopengl.html

+0

谢谢我会让你知道我如何得到 – 2011-03-13 16:04:33

+0

我已重新编辑原始帖子,给出我的开发设置更详细的图片 – 2011-03-13 16:37:06

+0

谢谢!那样做了 – 2011-03-14 01:19:20

1

是否遵循this guide - 对不起不是Mac用户

+0

谢谢..我从来没有见过安装指南。我会关注它,并让你知道 – 2011-03-13 16:09:59