在QT Creator中链接外部库

时间:2015-06-15 21:47:19

标签: qt-creator opencv3.0

我需要你的帮助。 我正在尝试将外部库与QT Creator链接 我收到三个LNK2019错误

mainwindow.obj:-1: error: LNK2019: unresolved external symbol ""void __cdecl cv::projectPoints(class cv::_InputArray const &,class cv::_InputArray const &,class cv::_InputArray const &,class cv::_InputArray const &,class cv::_InputArray const &,class cv::_OutputArray const &,class cv::_OutputArray const &,double)" (?projectPoints@cv@@YAXABV_InputArray@1@0000ABV_OutputArray@1@1N@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: unresolved external symbol ""bool __cdecl cv::solvePnP(class cv::_InputArray const &,class cv::_InputArray const &,class cv::_InputArray const &,class cv::_InputArray const &,class cv::_OutputArray const &,class cv::_OutputArray const &,bool,int)" (?solvePnP@cv@@YA_NABV_InputArray@1@000ABV_OutputArray@1@1_NH@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: unresolved external symbol ""bool __cdecl cv::findChessboardCorners(class cv::_InputArray const &,class cv::Size_<int>,class cv::_OutputArray const &,int)" (?findChessboardCorners@cv@@YA_NABV_InputArray@1@V?$Size_@H@1@ABV_OutputArray@1@H@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".

我的.pro文件

QT       += core gui widgets
TARGET = beispiel
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

INCLUDEPATH += C:/opencv/build/include/

LIBS += -LC:/opencv/build/x64/vc12/lib \
        -lopencv_calib3d249 \
        -lopencv_core249 \
        -lopencv_highgui249 \
        -lopencv_imgproc249

我安装了opencv3.0,希望能解决这个问题,但事实并非如此。

任何帮助将不胜感激。

现在我失去了一切。

我清理并重新构建了项目。 现在我得到16个链接错误。

mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""private: char * __thiscall cv::String::allocate(unsigned int)" (?allocate@String@cv@@AAEPADI@Z)" in Funktion ""public: __thiscall cv::Mat::Mat(int,int,int,void *,unsigned int)" (??0Mat@cv@@QAE@HHHPAXI@Z)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""private: void __thiscall cv::String::deallocate(void)" (?deallocate@String@cv@@AAEXXZ)" in Funktion ""public: __thiscall cv::Mat::Mat(int,int,int,void *,unsigned int)" (??0Mat@cv@@QAE@HHHPAXI@Z)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl cv::error(int,class cv::String const &,char const *,char const *,int)" (?error@cv@@YAXHABVString@1@PBD1H@Z)" in Funktion ""public: __thiscall cv::Mat::Mat(int,int,int,void *,unsigned int)" (??0Mat@cv@@QAE@HHHPAXI@Z)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""class cv::_InputOutputArray const & __cdecl cv::noArray(void)" (?noArray@cv@@YAABV_InputOutputArray@1@XZ)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual bool __thiscall cv::FileStorage::open(class cv::String const &,int,class cv::String const &)" (?open@FileStorage@cv@@UAE_NABVString@2@H0@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl cv::findContours(class cv::_InputOutputArray const &,class cv::_OutputArray const &,int,int,class cv::Point_<int>)" (?findContours@cv@@YAXABV_InputOutputArray@1@ABV_OutputArray@1@HHV?$Point_@H@1@@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl cv::line(class cv::_InputOutputArray const &,class cv::Point_<int>,class cv::Point_<int>,class cv::Scalar_<double> const &,int,int,int)" (?line@cv@@YAXABV_InputOutputArray@1@V?$Point_@H@1@1ABV?$Scalar_@N@1@HHH@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl cv::circle(class cv::_InputOutputArray const &,class cv::Point_<int>,int,class cv::Scalar_<double> const &,int,int,int)" (?circle@cv@@YAXABV_InputOutputArray@1@V?$Point_@H@1@HABV?$Scalar_@N@1@HHH@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl cv::ellipse(class cv::_InputOutputArray const &,class cv::Point_<int>,class cv::Size_<int>,double,double,double,class cv::Scalar_<double> const &,int,int,int)" (?ellipse@cv@@YAXABV_InputOutputArray@1@V?$Point_@H@1@V?$Size_@H@1@NNNABV?$Scalar_@N@1@HHH@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl cv::ellipse(class cv::_InputOutputArray const &,class cv::RotatedRect const &,class cv::Scalar_<double> const &,int,int)" (?ellipse@cv@@YAXABV_InputOutputArray@1@ABVRotatedRect@1@ABV?$Scalar_@N@1@HH@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl cv::projectPoints(class cv::_InputArray const &,class cv::_InputArray const &,class cv::_InputArray const &,class cv::_InputArray const &,class cv::_InputArray const &,class cv::_OutputArray const &,class cv::_OutputArray const &,double)" (?projectPoints@cv@@YAXABV_InputArray@1@0000ABV_OutputArray@1@1N@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""bool __cdecl cv::solvePnP(class cv::_InputArray const &,class cv::_InputArray const &,class cv::_InputArray const &,class cv::_InputArray const &,class cv::_OutputArray const &,class cv::_OutputArray const &,bool,int)" (?solvePnP@cv@@YA_NABV_InputArray@1@000ABV_OutputArray@1@1_NH@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""bool __cdecl cv::findChessboardCorners(class cv::_InputArray const &,class cv::Size_<int>,class cv::_OutputArray const &,int)" (?findChessboardCorners@cv@@YA_NABV_InputArray@1@V?$Size_@H@1@ABV_OutputArray@1@H@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual bool __thiscall cv::VideoCapture::read(class cv::_OutputArray const &)" (?read@VideoCapture@cv@@UAE_NABV_OutputArray@2@@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl cv::namedWindow(class cv::String const &,int)" (?namedWindow@cv@@YAXABVString@1@H@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".
mainwindow.obj:-1: error: LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl cv::imshow(class cv::String const &,class cv::_InputArray const &)" (?imshow@cv@@YAXABVString@1@ABV_InputArray@1@@Z)" in Funktion ""private: int __thiscall MainWindow::on_ButtonVideo_clicked(void)" (?on_ButtonVideo_clicked@MainWindow@@AAEHXZ)".

这是我的整个代码:

#include "mainwindow.h"

using namespace cv;
using namespace std;
Point prevCenter_bl;
Point prevCenter_gr;
Point prevCenter_rd;
int boardHeight = 6;
int boardWidth = 9;
Size cbSize = Size(boardHeight,boardWidth);

string filename = "out_camera_data.yml";
//default image size
const int FRAME_WIDTH = 640;
const int FRAME_HEIGHT = 480;

//function prototypes
//void generate_boardPoints();

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->ButtonVideo, SIGNAL(clicked()), this, SLOT(on_ButtonVideo_clicked()) );
    connect(ui->ButtonVideoRelease, SIGNAL(clicked()), this, SLOT(on_ButtonVideoRelease_clicked()) );
  //  connect(ui->videoFrame, SIGNAL(clicked()), this, SLOT(on_ButtonVideoRelease_clicked()) );
}

MainWindow::~MainWindow()
{
    delete ui;
}


int MainWindow::on_ButtonVideo_clicked()
{
    ///init_chess_board
    //set up a FileStorage object to read camera params from file
    FileStorage fs;
    fs.open(filename, FileStorage::READ);
    // read camera matrix and distortion coefficients from file
    Mat intrinsics, distortion;
    fs["Camera_Matrix"] >> intrinsics;
    fs["Distortion_Coefficients"] >> distortion;
    // close the input file
    fs.release();

    //set up matrices for storage
    Mat webcamImage, gray, one;
    Mat rvec = Mat(Size(3,1), CV_64F);
    Mat tvec = Mat(Size(3,1), CV_64F);

    //setup vectors to hold the chessboard corners in the chessboard coordinate system and in the image
    vector<Point2d> imagePoints, imageFramePoints, imageOrigin;
    vector<Point3d> boardPoints, framePoints;

    //generate vectors for the points on the chessboard
    for (int i=0; i<boardWidth; i++)
    {
        for (int j=0; j<boardHeight; j++)
        {
            boardPoints.push_back( Point3d( double(i), double(j), 0.0) );
        }
    }
    //generate points in the reference frame
    framePoints.push_back( Point3d( 0.0, 0.0, 0.0 ) );
    framePoints.push_back( Point3d( 5.0, 0.0, 0.0 ) );
    framePoints.push_back( Point3d( 0.0, 5.0, 0.0 ) );
    framePoints.push_back( Point3d( 0.0, 0.0, 5.0 ) );


    ///init_ellipse_tracking
//    namedWindow("Control"); //create a window called "Control"
    int iLowH_bl = 104;      //0
    int iHighH_bl = 179;   //179
    int iLowS_bl = 86;      //0
    int iHighS_bl = 255;   //255
    int iLowV_bl = 0;      //0
    int iHighV_bl = 255;   //255
    int sliderPos_bl = 70; //70

    int iLowH_gr = 87;      //0
    int iHighH_gr = 102;   //179
    int iLowS_gr = 108;      //0
    int iHighS_gr = 238;   //255
    int iLowV_gr = 78;      //0
    int iHighV_gr = 175;   //255
    int sliderPos_gr = 70; //70

    int iLowH_rd = 0;      //0
    int iHighH_rd = 34;   //179
    int iLowS_rd = 68;      //0
    int iHighS_rd = 255;   //255
    int iLowV_rd = 58;      //0
    int iHighV_rd = 117;   //255
    int sliderPos_rd = 70; //70

    //Create trackbars in "Control" window
//    cvCreateTrackbar("LowH", "Control", &iLowH, 179); //Hue (0 - 179)
//    cvCreateTrackbar("HighH", "Control", &iHighH, 179);
//    cvCreateTrackbar("LowS", "Control", &iLowS, 255); //Saturation (0 - 255)
//    cvCreateTrackbar("HighS", "Control", &iHighS, 255);
//    cvCreateTrackbar("LowV", "Control", &iLowV, 255); //Value (0 - 255)
//    cvCreateTrackbar("HighV", "Control", &iHighV, 255);
    //cvCreateTrackbar("Ellipse", "Control", &sliderPos, 255);

//    cvResizeWindow("Control", 220, 50);

    Mat imgOriginal;
    VideoCapture cap(0); //capture the video from web cam
    capture.set(CV_CAP_PROP_FRAME_WIDTH,FRAME_WIDTH);
    capture.set(CV_CAP_PROP_FRAME_HEIGHT,FRAME_HEIGHT);
    if ( !cap.isOpened() )  // if not success, exit program
    {
        cout << "Cannot open the web cam" << endl;
        return -1;
    }


    while (true)
    {
         /// chess_board
         //store image to matrix
         capture.read(webcamImage);

         //make a gray copy of the webcam image
         cvtColor(webcamImage,gray,COLOR_BGR2GRAY);


         //detect chessboard corners
         bool found = findChessboardCorners(gray, cbSize, imagePoints, CALIB_CB_FAST_CHECK);
         //drawChessboardCorners(webcamImage, cbSize, Mat(imagePoints), found);



         //find camera orientation if the chessboard corners have been found
         if ( found )
         {
             //find the camera extrinsic parameters
             solvePnP( Mat(boardPoints), Mat(imagePoints), intrinsics, distortion, rvec, tvec, false );

             //project the reference frame onto the image
             projectPoints(framePoints, rvec, tvec, intrinsics, distortion, imageFramePoints );


             //DRAWING
             //draw the reference frame on the image
             circle(webcamImage, (Point) imagePoints[0], 4 ,CV_RGB(255,0,0) );

             Point one, two, three;
             one.x=10; one.y=10;
             two.x = 60; two.y = 10;
             three.x = 10; three.y = 60;

             line(webcamImage, one, two, CV_RGB(255,0,0) );
             line(webcamImage, one, three, CV_RGB(0,255,0) );


             line(webcamImage, imageFramePoints[0], imageFramePoints[1], CV_RGB(255,0,0), 2 );
             line(webcamImage, imageFramePoints[0], imageFramePoints[2], CV_RGB(0,255,0), 2 );
             line(webcamImage, imageFramePoints[0], imageFramePoints[3], CV_RGB(0,0,255), 2 );



             //show the pose estimation data
             cout << fixed << setprecision(2) << "rvec = ["
                  << rvec.at<double>(0,0) << ", "
                  << rvec.at<double>(1,0) << ", "
                  << rvec.at<double>(2,0) << "] \t" << "tvec = ["
                  << tvec.at<double>(0,0) << ", "
                  << tvec.at<double>(1,0) << ", "
                  << tvec.at<double>(2,0) << "]" << endl;

         }

         //show the image on screen
         namedWindow("OpenCV Webcam", 0);
         imshow("OpenCV Webcam", webcamImage);


         //show the gray image
         //namedWindow("Gray Image", CV_WINDOW_AUTOSIZE);
         //imshow("Gray Image", gray);

        /// ellipse_tracking
        bool bSuccess = cap.read(imgOriginal); // read a new frame from video
        if (!bSuccess) //if not success, break loop
        {
             cout << "Cannot read a frame from video stream" << endl;
             break;
        }
        Mat imgHSV_bl;
        Mat imgHSV_gr;
        Mat imgHSV_rd;
        cvtColor(imgOriginal, imgHSV_bl, COLOR_BGR2HSV); //Convert the captured frame from BGR to HSV
        cvtColor(imgOriginal, imgHSV_gr, COLOR_BGR2HSV); //Convert the captured frame from BGR to HSV
        cvtColor(imgOriginal, imgHSV_rd, COLOR_BGR2HSV); //Convert the captured frame from BGR to HSV
        Mat imgThresholded_bl;
        Mat imgThresholded_gr;
        Mat imgThresholded_rd;
        inRange(imgHSV_bl, Scalar(iLowH_bl, iLowS_bl, iLowV_bl), Scalar(iHighH_bl, iHighS_bl, iHighV_bl), imgThresholded_bl); //Threshold the image
        inRange(imgHSV_gr, Scalar(iLowH_gr, iLowS_gr, iLowV_gr), Scalar(iHighH_gr, iHighS_gr, iHighV_gr), imgThresholded_gr); //Threshold the image
        inRange(imgHSV_rd, Scalar(iLowH_rd, iLowS_rd, iLowV_rd), Scalar(iHighH_rd, iHighS_rd, iHighV_rd), imgThresholded_rd); //Threshold the image

        //morphological opening (remove small objects from the foreground)
        erode(imgThresholded_bl, imgThresholded_bl, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );
        erode(imgThresholded_gr, imgThresholded_gr, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );
        erode(imgThresholded_rd, imgThresholded_rd, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );
        dilate( imgThresholded_bl, imgThresholded_bl, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );
        dilate( imgThresholded_gr, imgThresholded_gr, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );
        dilate( imgThresholded_rd, imgThresholded_rd, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );

        //morphological closing (fill small holes in the foreground)
        dilate( imgThresholded_bl, imgThresholded_bl, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );
        dilate( imgThresholded_gr, imgThresholded_gr, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );
        dilate( imgThresholded_rd, imgThresholded_rd, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );
        erode(imgThresholded_bl, imgThresholded_bl, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );
        erode(imgThresholded_gr, imgThresholded_gr, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );
        erode(imgThresholded_rd, imgThresholded_rd, getStructuringElement(MORPH_ELLIPSE, Size(5, 5)) );

//        imshow("Thresholded Image Blue", imgThresholded_bl); //show the thresholded image
//        imshow("Thresholded Image Green", imgThresholded_gr); //show the thresholded image
//        imshow("Thresholded Image Red", imgThresholded_rd); //show the thresholded image
        //imshow("Original", imgOriginal); //show the original image

        ///#### End sticker color selection ####

        vector<vector<Point> > contours_bl;
        vector<vector<Point> > contours_gr;
        vector<vector<Point> > contours_rd;
           Mat bimage_bl = imgThresholded_bl >= sliderPos_bl;
           Mat bimage_gr = imgThresholded_gr >= sliderPos_gr;
           Mat bimage_rd = imgThresholded_rd >= sliderPos_rd;

           findContours(bimage_bl, contours_bl, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
           findContours(bimage_gr, contours_gr, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
           findContours(bimage_rd, contours_rd, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);

           for(size_t i = 0; i < contours_bl.size(); i++){
               size_t count = contours_bl[i].size();
               if( count < 6 )
                   continue;
               Mat pointsf;
               Mat(contours_bl[i]).convertTo(pointsf, CV_32F);
               RotatedRect box = fitEllipse(pointsf);
               prevCenter_bl.x = box.center.x;
               prevCenter_bl.y = box.center.y;
               ellipse(imgOriginal, box, Scalar(0,0,255), 1, CV_AA);
               ellipse(imgOriginal, box.center, box.size*0.0001f, box.angle, 0, 360, Scalar(0,255,255), 1, CV_AA);

               line(imgOriginal, box.center, prevCenter_gr, cv::Scalar(0,255,0), 1, CV_AA);

           }
           for(size_t i = 0; i < contours_gr.size(); i++){
               size_t count = contours_gr[i].size();
               if( count < 6 )
                   continue;
               Mat pointsf;
               Mat(contours_gr[i]).convertTo(pointsf, CV_32F);
               RotatedRect box = fitEllipse(pointsf);
               prevCenter_gr.x = box.center.x;
               prevCenter_gr.y = box.center.y;
               ellipse(imgOriginal, box, Scalar(0,0,255), 1, CV_AA);
               ellipse(imgOriginal, box.center, box.size*0.0001f, box.angle, 0, 360, Scalar(0,255,255), 1, CV_AA);

               line(imgOriginal, box.center, prevCenter_rd, cv::Scalar(0,255,0), 1, CV_AA);

           }
           for(size_t i = 0; i < contours_rd.size(); i++){
               size_t count = contours_rd[i].size();
               if( count < 6 )
                   continue;
               Mat pointsf;
               Mat(contours_rd[i]).convertTo(pointsf, CV_32F);
               RotatedRect box = fitEllipse(pointsf);
               prevCenter_rd.x = box.center.x;
               prevCenter_rd.y = box.center.y;
               ellipse(imgOriginal, box, Scalar(0,0,255), 1, CV_AA);
               ellipse(imgOriginal, box.center, box.size*0.0001f, box.angle, 0, 360, Scalar(0,255,255), 1, CV_AA);

               line(imgOriginal, box.center, prevCenter_bl, cv::Scalar(0,255,0), 1, CV_AA);

           }
           imshow("result", imgOriginal);
           waitKey(10);
    }
          return 0;

}

void MainWindow::on_ButtonVideoRelease_clicked()
{
    if(capture.isOpened())
    capture.release();
}

标题:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <opencv2/opencv.hpp>
#include <opencv/cv.hpp>
#include "ui_mainwindow.h"
#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/calib3d/calib3d.hpp>
#include <iostream>
#include <stdio.h>
#include <string>
#include <iomanip>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    cv::VideoCapture capture;

private slots:
    int on_ButtonVideo_clicked();
    void on_ButtonVideoRelease_clicked();
};

#endif // MAINWINDOW_H

和.pro

QT       += core gui widgets

TARGET = beispiel
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

INCLUDEPATH += C:/opencv/build/include/

LIBS += -LC:/opencv/build/x64/vc12/lib \
        -lopencv_calib3d249 \
        -lopencv_core249 \
        -lopencv_highgui249 \
        -lopencv_imgproc249 \

它仍然是一样的。 我有opencv 2.4.9。和3.0安装,所以文件夹C:/ opencv / build / x64 / vc12 / lib和C:/ opencv / build / x64 / vc12 / staticlib中有这些库。

lib和staticlib有什么区别? 任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您正在尝试关联一个或多个不存在的库:

opencv_calib3d249

当我检查OpenCV 3.0 sfx的内容时,我只能看到这些库:

opencv\build\x64\vc11\staticlib\opencv_calib3d300.lib
opencv\build\x64\vc12\staticlib\opencv_calib3d300.lib
opencv\build\x86\vc11\staticlib\opencv_calib3d300.lib
opencv\build\x86\vc12\staticlib\opencv_calib3d300.lib

所以在我看来,libs的路径(C:/opencv/build/x64/vc12/lib)和文件中的版本号(249)都不正确。

如果要查看您引用的.lib文件,以找出它们导出的方法,请使用与此类似的命令:

dumpbin opencv_calib3d300.lib /symbols

Dumpbin是Visual Studio的一部分,SO上提供了大量信息,例如here