[solved] Impossible to include OpenCV path



  • I am trying to configure a new Qt Creator project in order to use OpenCV 3.1.0. I downloaded the precompiled binaries from http://opencv.org/downloads.html, and I created an empty Qt gui project. The problem is that qmake doesn't find the opencv headers, no matter how I try to include their path. Here is my last attempt:

    QT       += core gui
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    TARGET = App_v1
    TEMPLATE = app
    INCLUDEPATH += C:/OpenCV-3.1.0/opencv/build/include
    LIBS += -L”C:\OpenCV-3.1.0\opencv\build\x64\vc14\lib”
    LIBS += -lopencv_world310d
    SOURCES += main.cpp\
            mainwindow.cpp
    HEADERS  += mainwindow.h
    FORMS    += mainwindow.ui
    

    and in the code:

    #include <iostream>
    
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include "mainwindow.h"
    #include <QApplication>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        cv::Mat image = cv::Mat::zeros(100, 100, CV_8UC3);
        cv::imshow("image", image);
        cv::waitKey(10);
    
        cout << "Hello cout!" << endl;
        cerr << "Hello cerr!" << endl;
        printf("Hello printf!");
        cout << flush;
    
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
    
        return a.exec();
    }
    

    When I try to compile this, I get: "C1083: Cannot open include file: 'opencv2/core/core.hpp": No such file or directory
    (btw thanks Qt Creator for not letting me select and copy the text of the error. Sorry I digress...)
    I am sure that the path is correct, and the funny thing is that when I type cv:: the auto completion finds and lists the classes and functions in the cv namespace.... what is going on here?

    EDIT: I forgot to mention that OpenCV works perfectly with Visual Studio, so I know that it is installed correctly.



  • I think the problem is that you have . (the dot) in the path.

    try replacing
    INCLUDEPATH += C:/OpenCV-3.1.0/opencv/build/include
    with
    INCLUDEPATH += "C:/OpenCV-3.1.0/opencv/build/include"



  • This post is deleted!


  • @VRonin Thank you for your reply. I tried, but it doesn't have any effect. I do not think that dots cause this problem (or at least, it is not mentioned anywhere). Apparently you need quotes for path with spaces only.



  • This is strange, the .pro looks correct. if C:/OpenCV-3.1.0/opencv/build/include/opencv2/core/core.hpp definitely exists then try clean your project before building, it might be just some leftovers



  • @VRonin Yep that was the problem, thank you. I didn't think about cleaning before rebuilding, I believe that it should be automatic... Sadly, now I have another problem:

    :-1: error: LNK1104: cannot open file 'opencv_world310d.lib'

    and again, I know that the name of the file and the path are correct



  • try replacing

    LIBS += -L”C:\OpenCV-3.1.0\opencv\build\x64\vc14\lib”
    LIBS += -lopencv_world310d
    

    with
    LIBS += "C:/OpenCV-3.1.0/opencv/build/x64/vc14/lib/opencv_world310d.lib"

    Clean and rebuild



  • @VRonin Thank you again, now it works. I also had to copy the dlls from Qt and opencv into the program folder, since it wouldn't find them otherwise. Now the program runs correctly, many thanks.

    If I may ask one more question, do you know if it is possible to add a path for dlls in qmake? Or is that only related to the windows path variable, since the dlls are to be loaded at runtime after compilation?



  • dll paths do not influence the build so they are not included in qmake. if you use QtCreator in the right bar select project and in the build and run tab, select the run subtab and you can customise the run environment adding the paths of the dlls to the run environment PATH

    otherwise you can use the INSTALLS of qmake to deploy all the binaries where you need them


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.