c++ - 未定义对 cv::Tracker::update 的引用

标签 c++ windows opencv linker-errors

我正在尝试使用 OpenCV 的跟踪 API。我按照此处的说明制作了 OpenCV:https://github.com/itseez/opencv_contrib/ .在构建时,我不得不关闭 CMake gui 中的一些参数。 make 之后,我使用 Tracking API 运行了以下代码:

#include <opencv2/core/utility.hpp>
#include <opencv2/video/tracking.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <tracker.hpp>
#include <iostream>
#include <cstring>

using namespace std;
using namespace cv;

static Mat image;
static Rect2d boundingBox;
static bool paused;
static bool selectObject = false;
static bool startSelection = false;

static void onMouse( int event, int x, int y, int, void* )
{
  if( !selectObject )
  {
    switch ( event )
    {
      case EVENT_LBUTTONDOWN:
        //set origin of the bounding box
        startSelection = true;
        boundingBox.x = x;
        boundingBox.y = y;
        boundingBox.width = boundingBox.height = 0;
        break;
      case EVENT_LBUTTONUP:
        //sei with and height of the bounding box
        boundingBox.width = std::abs( x - boundingBox.x );
        boundingBox.height = std::abs( y - boundingBox.y );
        paused = false;
        selectObject = true;
        break;
      case EVENT_MOUSEMOVE:

        if( startSelection && !selectObject )
        {
          //draw the bounding box
          Mat currentFrame;
          image.copyTo( currentFrame );
          rectangle( currentFrame, Point((int) boundingBox.x, (int)boundingBox.y ), Point( x, y ), Scalar( 255, 0, 0 ), 2, 1 );
          imshow( "Tracking API", currentFrame );
        }
        break;
    }
  }
}

//
//  Hot keys:
//   q - quit the program
//   p - pause video
//

int main( int argc, char** argv )
{
    //open the capture
    VideoCapture cap(0);
    if( !cap.isOpened() )
    {
      return -1;
    }

    //
    //  "MIL", "BOOSTING", "MEDIANFLOW", "TLD"
    //
    string tracker_algorithm = "MIL";
    if ( argc>1 ) tracker_algorithm = argv[1];

    Mat frame;
    paused = false;
    namedWindow( "Tracking API", 0 );
    setMouseCallback( "Tracking API", onMouse, 0 );

    Ptr<Tracker> tracker = Tracker::create( tracker_algorithm );
    if( tracker == NULL )
    {
        cout << "***Error in the instantiation of the tracker...***\n";
        return -1;
    }

    //get the first frame
    cap >> frame;
    frame.copyTo( image );
    imshow( "Tracking API", image );

    bool initialized = false;
    int frameCounter = 0;

    for ( ;; )
    {
        char c = (char) waitKey( 2 );
        if( c == 'q' || c == 27 )
            break;
        if( c == 'p' )
            paused = !paused;

        if ( !paused )
        {
            cap >> frame;
            if(frame.empty())
            {
                break;
            }
            frame.copyTo( image );

            if( selectObject )
            {
                if( !initialized )
                {
                    //initializes the tracker
                    if( !tracker->init( frame, boundingBox ) )
                    {
                    cout << "***Could not initialize tracker...***\n";
                    return -1;
                    }
                    initialized = true;
                }
                else
                {
                    //updates the tracker
                    if( tracker->update( frame, boundingBox ) )
                    {
                        rectangle( image, boundingBox, Scalar( 255, 0, 0 ), 2, 1 );
                    }
                }
            }
            imshow( "Tracking API", image );
            frameCounter++;
        }
    }

    return 0;
}

但是,我在链接时收到一个错误,指出类 Tracker 的函数未定义。这是我的构建日志的一部分:

g++.exe -LC:\opencv\min_bin\install\x64\mingw\lib -o bin\Debug\main_project.exe obj\Debug\t1.o C:\opencv\min_bin\install\x64\mingw\lib\libopencv_bgsegm300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_bioinspired300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_calib3d300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_ccalib300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_core300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_dnn300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_dpm300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_face300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_features2d300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_flann300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_fuzzy300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_hal300.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_highgui300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_imgcodecs300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_imgproc300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_ml300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_objdetect300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_photo300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_plot300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_reg300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_rgbd300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_saliency300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_shape300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_stereo300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_stitching300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_structured_light300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_superres300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_surface_matching300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_text300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_ts300.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_video300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_videoio300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_videostab300.dll.a C:\opencv\min_bin\install\x64\mingw\lib\libopencv_xobjdetect300.dll.a obj\Debug\t1.o: In function main': E:/main_proj/main_project/t1.cpp:79: undefined reference tocv::Tracker::create(cv::String const&)' E:/main_proj/main_project/t1.cpp:116: undefined reference to cv::Tracker::init(cv::Mat const&, cv::Rect_<double> const&)' E:/main_proj/main_project/t1.cpp:126: undefined reference tocv::Tracker::update(cv::Mat const&, cv::Rect_&)'

我想这是在制作 OpenCV 的过程中出现的一些问题。有人可以提出解决方案吗?

最佳答案

当使用-L(带库的目录路径)选项链接时

-LC:\opencv\min_bin\install\x64\mingw\lib

您还应该使用 -l 来链接到特定的库。

似乎没有找到-lopencv_tracking300库。

关于c++ - 未定义对 cv::Tracker::update 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480319/

相关文章:

windows - Windows 10 和 ChromeOS 拒绝 SSH 连接

C++ - 错误 : expected primary-expression before '<<' token

c++ - 如何使用 boost asio 正确地将端口随机分配给测试 HTTP 服务器?

c++ - 如何最好地将 C++/Cython 项目编译成可执行文件?

c++ - vector 内存的有效清除

image - OpenCV : Transparent area of imported . png 文件现在是白色的

c# - 使用 DlImport、Entrypoint 从 C# 调用命名空间中的 C++ 函数

c++ - 完全特化的模板和 dllexport

c++ - 如何有效地合并 TBB 线程的结果

python - virtualenv 和 python 中的两个版本的 OpenCV