在OSX上的QT中设置OpenCV

No *_*ing 7 macos qt opencv

我正在努力设置OpenCVQTOSX 10.7.5/MacbookPro 2.5 Ghz Intel Core 2 Duo一起使用.我在这里看到了一些相关的问题(如何在QtCreator中链接opencv并使用Qt库 以及 如何在OSX中使用QT设置OpenCV?)但是没有太多细节.在QT网站和我的网络搜索中,所有信息似乎都与Windows或Linux有关.


我列出了我的设置和代码如下.当我运行代码时,我收到一个错误::-1: error: symbol(s) not found for architecture x86_64

这是否意味着它找不到东西,因为路径错误或因为我可能为x86_32构建了openCV?有没有办法检查后者?部分配置和设置过程我不是那么精明.


更新2

控制台输出低于 - 可能错误很明显?

02:44:38: Running steps for project RP_openCV_01...
02:44:38: Configuration unchanged, skipping qmake step.
02:44:38: Starting: "/usr/bin/make" 
clang++ -headerpad_max_install_names -mmacosx-version-min=10.6 -o RP_openCV_01 main.o   -L/usr/local/lib -1ibopencv_core.2.4.6,dylib -1ibopencv_imgproc.2.4.6.dylib -F/Users/rise/Qt5.0.2/5.0.2/clang_64/lib -framework QtCore 
clang: warning: argument unused during compilation: '-1ibopencv_core.2.4.6,dylib'
clang: warning: argument unused during compilation: '-1ibopencv_imgproc.2.4.6.dylib'
Undefined symbols for architecture x86_64:
  "cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:
      _main in main.o
  "cv::namedWindow(std::string const&, int)", referenced from:
      _main in main.o
  "cv::Mat::deallocate()", referenced from:
      _main in main.o
  "cv::imread(std::string const&, int)", referenced from:
      _main in main.o
  "cv::imshow(std::string const&, cv::_InputArray const&)", referenced from:
      _main in main.o
  "cv::waitKey(int)", referenced from:
      _main in main.o
  "cv::fastFree(void*)", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [RP_openCV_01] Error 1
02:44:38: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project RP_openCV_01 (kit: Desktop Qt 5.0.2 clang 64bit)
When executing step 'Make'
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的(tl; dr):

  • 从源代码构建并安装了最新版本的openCV(2.4.6),并使用一些命令行程序对其进行了测试.

  • 安装了最新版本的QT(5.1)并能够运行所有示例等.

  • 指定项目文件中的路径(如下)

QT       += core
QT       -= gui

TARGET = RP_openCV_01
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app
SOURCES += main.cpp

INCLUDEPATH += /usr/local/include\
LIBS += -L/usr/local/lib
Run Code Online (Sandbox Code Playgroud)
  • 试图在项目设置中指定路径(如下).我说/usr/local/include/usr/local/lib

在此输入图像描述

main.cpp中的简单示例代码

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

int main() {

    // read an image
    cv::Mat image= cv::imread("dog.jpg");
    // create image window named "My Image"
    cv::namedWindow("My Image");
    // show the image on window
    cv::imshow("My Image", image);
    // wait key for 5000 ms
    cv::waitKey(5000);

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

更新1

我根据教程尝试的另一件事是在QT配置文件中指定libs(如下图所示).该教程适用于Windows,但我不知道OSX是否或如何不同.在Windows示例中,-1ibopencv_core246d我尝试使用和不使用分隔期但没有"d".当然lib的全名是"libopencv_core.2.4.6.dylib"等.

这些重要的细节总是让我兴奋不已,但在教程中经常假设人们知道这些东西.

 LIBS += -L/usr/local/lib \
     -1ibopencv_core.2.4.6 \
     -1ibopencv_imgproc.2.4.6 \
     -1ibopencv_features2d.2.4.6 \
     -1ibopencv_highgui.2.4.6
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

No *_*ing 8

只是一个天真的错误

适当的声明是:

LIBS += -L/usr/local/lib \
     -lopencv_core \
     -lopencv_imgproc \
     -lopencv_features2d\
     -lopencv_highgui
Run Code Online (Sandbox Code Playgroud)