【问题标题】:OpenCV (C++/Qt) - cornerSubPix errorOpenCV (C++/Qt) -cornerSubPix 错误
【发布时间】:2015-06-21 10:21:36
【问题描述】:

你好!

我在使用 imgproc.hpp 文件中的cornerSubPix 方法时遇到问题。 我不明白缺少哪个库或错误是什么。 我在 OS X 10.10.3 上使用 Qt 5.4.1,并使用 OpenCV 3.0.0 C++ 库。

这是我的代码:

    #include <opencv2/opencv.hpp>
    #include <opencv2/core/types.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc.hpp>
    #include <opencv2/features2d/features2d.hpp>
    #include <vector>
    #include <stdio.h>
    #include "cameraparams.h"
    #include <iostream>

    [...]

    vector< vector <Point2f> > left_2D_points, right_2D_points;

        for( int i=0;i<left_images.size();i++){

            Mat left_image = left_images[i];
            Mat rig

ht_image = right_images[i];
        std::vector<cv::Point2f> left_im_points,right_im_points;

        bool found_left = findChessboardCorners(left_image,Size(width,height),left_im_points,CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE+ CALIB_CB_FAST_CHECK);
        bool found_right = findChessboardCorners(right_image,Size(width,height),right_im_points,CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE+ CALIB_CB_FAST_CHECK);

        if( found_left && found_right){
              Size winSize = Size( 7, 7 );
              Size zeroZone = Size( -1, -1 );
              TermCriteria criteria = TermCriteria( TermCriteria::EPS + TermCriteria::MAX_ITER, 40, 0.001 );

              cv::cornerSubPix(left_image,left_im_points,winSize,zeroZone,criteria);

        }

    }

这是我的 *.pro 文件:

INCLUDEPATH +=  /usr/local/include/ \
                /usr/local/include/pcl-1.7/ \
                /usr/local/include/eigen3/ \
                /usr/local/include/vtk-6.2/

LIBS += -L/usr/local/lib \
        -lopencv_core \
        -lopencv_imgcodecs \
        -lopencv_highgui \
        -lopencv_imgproc \
        -lopencv_objdetect \
        -lopencv_calib3d \
        -lopencv_features2d \
        -lopencv_flann \
        -lopencv_ml \
        -lopencv_photo \
        -lopencv_shape \
        -lopencv_stitching \
        -lopencv_superres \
        -lopencv_ts \
        -lopencv_video \
        -lopencv_videoio \
        -lopencv_videostab

所以我想在我的棋盘上更精确地检测角落。但是当我编译时,我得到了这个错误:

Undefined symbols for architecture x86_64:
  "cv::_InputArray::getMatVector(std::vector<cv::Mat, std::allocator<cv::Mat> >&) const", referenced from:
      vtable for cv::_InputOutputArray in calibrator.o
  "cv::_InputArray::getUMatVector(std::vector<cv::UMat, std::allocator<cv::UMat> >&) const", referenced from:
      vtable for cv::_InputOutputArray in calibrator.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: *** [Classification] Error 1

我几天以来一直在寻找答案,但我已经被阻止了。 提前感谢大家的任何线索!

【问题讨论】:

  • 您用于 Qt 项目的编译器是否与用于编译 OpenCV 的编译器相同?由于您使用的是 Mac,这也可能是与所使用标准库的不同版本相关的问题(libstdc++libc++)。
  • 谢谢你的回答,你有什么建议?关于 libstdc++ 和 libc++ ?为了编译 OpenCV,我使用了 cmake,我怎么知道 Qt 中使用了哪个编译器?我认为是 GCC 或 Clang。

标签: c++ macos qt opencv


【解决方案1】:

我上次使用相同的配置(Mac OS 10.10.3、Qt 5.4.1、OpenCV 3.0)时遇到了同样的问题。似乎编译器clang与opencv 3.0不兼容。

使用旧版本的opencv(例如2.4.10)可能会解决问题。

玩得开心,祝你好运:)

【讨论】:

    【解决方案2】:

    这个问题首先是reported here。它似乎与您的编译器正在使用的 C++ 标准库的版本有关。已经在该线程上讨论了一些解决方法。

    不过another answer on Stackoverflow 似乎解决了这个问题。

    Google is your friend.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 2016-11-08
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多