OpenCV + Qt Creator + 64bit Rechner

#2723478
Lesenswert?

Hallo Leute,

ich möchte auf meinem neuen Rechner mit 64bit MS7 die OpenCV library in 
einem Qt 4.7 Projekt verwenden. Nach langem herumprobieren habe ich es 
nun geschafft die libs so zu linken, dass ich keine Fehler mehr bekomme.
Das Beispielprogramm lässt sich nun kompilieren. Jedoch verhält es sich 
nicht ganz so wie ich es erwartet habe. Wenn ich das Programm ausführe 
werden keine Ausgaben angezeigt. Weder das Bild, noch irgendeine 
cout-Ausgabe.
Ich vermute, dass die Ursache des Problems irgendwo in den verschiedenen 
Architekturen liegt (MinGV = 32bit, OpenCV = 32bit, PC = 64bit). Kann 
das sein? Hat jemand von euch die Kombination aus OpenCV und QT4 schon 
auf einem 64bit Rechner zum laufen bekommen? Und wenn ja, wie?

lg much

PS: Hier noch meine Dateien.

Meine .pro Datei:
1
TEMPLATE = app
2
CONFIG += console
3
CONFIG -= qt
4

5
INCLUDEPATH += "C:\OpenCV_2-4\build\include"
6

7
LIBS +=  "C:\OpenCV_2-4\build\x86\mingw\lib\libopencv_core240.dll.a" \
8
         "C:\OpenCV_2-4\build\x86\mingw\lib\libopencv_highgui240.dll.a"
9

10
SOURCES += main.cpp

Mein Beispielprogramm:
1
#include <opencv2/highgui/highgui.hpp>
2
#include <opencv2/core/core.hpp>
3
#include <iostream>
4

5
using namespace cv;
6
using namespace std;
7

8
int main(int argc, char** argv){
9

10
    Mat image;
11
    image = imread("pin-up.jpg",CV_LOAD_IMAGE_COLOR);
12

13
    if(!image.data){
14
        cout << "Could not open or find the image" << std::endl;
15
        return -1;
16
    }
17

18
    cout << "Image loaded successful" << std::endl;
19

20
    namedWindow("Display window", CV_WINDOW_AUTOSIZE);
21
    imshow("Display window", image);
22

23
    waitKey(0);
24
    return 0;
25
}
#2724128
Lesenswert?

Hi,

ich hab mich jetzt noch mal vors Programm gesetzt und ein bisschen 
rumgespielt. Wenn ich alle OpenCV Befehle ausmarkiere funktionieren die 
Ausgaben (cout) richtig. Wenn ich dann aber die Codezeile
1
Mat image;
wieder einfüge sind wieder alle Ausgaben weg. Kann mir evtl. dazu jemand 
einen Hinweis geben? Ich kann mir dieses Verhalten gerade gar nicht 
erklähren.

lg much
#2724867
Lesenswert?

Hallo Frank,

danke für deine Antwort. Meine Applikation wird mithilfe von mingw 
compiliert. Die DLLs der OpenCV wurden über die pre-build Version 
installiert. Soweit ich das herauslesen konnte wird dazu auch der mingw 
Compiler verwendet.

Frank K. schrieb:
> Benutzen sie eine gemeinsame C/C++ runtime?

Die Frage ist jetzt vielleicht blöd, aber wie kann ich das denn 
überprüfen?
#2724922
Lesenswert?

Michael N. schrieb:
> Hallo Frank,
>
> danke für deine Antwort. Meine Applikation wird mithilfe von mingw
> compiliert. Die DLLs der OpenCV wurden über die pre-build Version
> installiert. Soweit ich das herauslesen konnte wird dazu auch der mingw
> Compiler verwendet.

Und QT?

> Frank K. schrieb:
>> Benutzen sie eine gemeinsame C/C++ runtime?
>
> Die Frage ist jetzt vielleicht blöd, aber wie kann ich das denn
> überprüfen?

Schau Dir mithilfe von exehdr o.ä. an, welche DLLs importiert werden.

Ab Besten ALLES, was benutzt wird, noch einmal bei Dir mit identischen 
Settings durchcompilieren. Die DLL-Schnittstelle ist für C-Funktionen 
standardisiert, nicht aber für C++.

fchk
#2724998
Lesenswert?

Frank K. schrieb:
> Und QT?
Qt verwendet laut Einstellungen auch MinGW (x86 32bit) (ich hab mal ein 
Bild der Qt Einstellungen angehängt).


Frank K. schrieb:
> Schau Dir mithilfe von exehdr o.ä. an, welche DLLs importiert werden.
Ich hab mir das Programm jetzt mal mit dem Dependency Walker angeschaut. 
Dieser Gibt mir den Fehler aus "Modules with different CPU types were 
found".

Frank K. schrieb:
> Ab Besten ALLES, was benutzt wird, noch einmal bei Dir mit identischen
> Settings durchcompilieren.
Ich denke ich werd jetzt erst mal versuchen die Kombination aus Qt und 
OpenCV auf einem 32bit System zum Laufen zu bringen und wenn dort alles 
fehlerfrei läuft auf das 64bit System übergehen.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren