Forum: PC-Programmierung OpenCV + Qt Creator + 64bit Rechner


von Michael N. (much)


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
}

von Michael N. (much)


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

von Frank K. (fchk)


Lesenswert?

Sind alle Bestandteile des Projektes (Applikation und alle DLLs) mit dem 
selben Compiler und identischen Einstellungen gebaut worden? Benutzen 
sie eine gemeinsame C/C++ runtime?

fchk

von Michael N. (much)


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?

von Frank K. (fchk)


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

von Michael N. (much)


Angehängte Dateien:

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.