Forum: PC-Programmierung OpenCV Fehler beim Debug in VS2010


von Manuel Volk (Gast)


Lesenswert?

Hallo,

hoffe mal das mir jemand helfen kann.
Ich will ein Projekt mit Hilfe der Bibliothek OpenCV realisieren
und habe OpenCV mit Hilfe dieses Tutorial eingepflegt:
www.youtube.com/watch?v=cgo0UitHfp8

Und auch das Testprogramm des Tutorial kopiert.
Code folgt weiter unten.

Nun die Frage, beim debuggen bekomme ich folgeende Ausgaben:


"New_OpenCV.exe": "C:\Users\....\Documents\Visual Studio 
2010\Projects\New_OpenCV\Debug\New_OpenCV.exe" geladen, Symbole wurden 
geladen.
"New_OpenCV.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Cannot find 
or open the PDB file
"New_OpenCV.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Cannot 
find or open the PDB file
"New_OpenCV.exe": "C:\Windows\SysWOW64\KernelBase.dll" geladen, Cannot 
find or open the PDB file
Das Programm "[4728] New_OpenCV.exe: Systemeigen" wurde mit Code 
-1073741701 (0xc000007b) beendet.


kann mir jemand vielleicht sagen was der Fehler ist?



Der Code:

#include<opencv\cv.h>
#include<opencv\highgui.h>

using namespace cv;

int main(){

  //create matrix to store image

  Mat image;

  //initialize capture

  VideoCapture cap;
  cap.open(0);

  //create window to show the image

  namedWindow("window", 1);

  while(1){

    //copy webcam stream to image

    cap>>image;

    //print image to screen

    imshow("window", image);

    //delay between frames

    waitKey(33);

  }
  return 0;
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Hinweise auf die nicht gefundenden PDB-Dateien sind nur Hinweise, 
keine Fehlermeldung. Das bedeutet nur, daß für die genannten DLLs keine 
Debugsymbole verfügbar sind.

Lässt Du das Programm denn im Debugger einfach durchlaufen, oder gibts 
das beim Versuch des Single-Step?

Hast Du das als natives C++-Programm übersetzt, oder etwa mit der 
MS-Perversion "C++/CLI"?

von Manuel Volk (Gast)


Lesenswert?

Ich habe das einfach so wie es ist im Debug durchlaufen lassen ohne
Single-Step. Die Zweite Frage verstehe ich nicht so ganz. Die Bibliothek 
ist so wie sie ist von Sourcforge geladen und wie im Video beschrieben 
eingebunden. Und dann nach das Programm nach C++ standard geschrieben.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Manuel Volk schrieb:
> Ich habe das einfach so wie es ist im Debug durchlaufen lassen ohne
> Single-Step.

Naja, Du könntest ja mal in irgendeine Zeile einen Breakpoint setzen und 
sehen, ob das Programm da vorbeikommt.

Manuel Volk schrieb:
> Die Zweite Frage verstehe ich nicht so ganz.

Ich sehe mir das Video nicht an. Visual Studio enthält mehrere Compiler, 
einen echten C/C++-Compiler und einen Compiler für die .Net-"Sprache" 
namens "C++/CLI" bzw. "Managed C++". Beim Einrichten eines Projektes 
wählt man aus, welcher Compiler verwendet wird - und das solltest Du 
wissen, was Du da gemacht hast.

von Manuel Volk (Gast)


Lesenswert?

Vielleicht kann mir ja jemand sagen wie ich den Compiler in VS2010 
Ultimate
umstelle. Kann das selber egent wie nicht finden aber warum sollte das 
der Fehler sein bzw. hat das mit meiner eigentlichen Fehlerbeschreibung 
etwas zu tun?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das stellt man nicht nachträglich um, das richtet man beim Erstellen 
eines neuen Projektes ein.

Ob das mit Deinem Problem zu tun haben kann, weiß ich nicht, aber es ist 
ein ganz erheblicher Unterschied.

Hast Du Dich denn jetzt mal mit dem ersten Teil beschäftigt?

Dein Programm scheint in keiner Weise zu überprüfen, ob die 
verschiedenen angelegten Objekte überhaupt funktionieren bzw. gültig 
sind; würdest Du Dir die Objekte im Debugger ansehen bzw. mit dem 
Debugger in den zugehörigen Code bei der Erstellung steppen, könntest Du 
herausfinden, wo das Problem liegt.

Ich vermute, daß weder

  cap.open(0);

noch

  namedWindow("window", 1);

funktionieren.

von Manuel Volk (Gast)


Lesenswert?

Ja habe ich der Fehler tritt auf sofort beim Start der Debug exe also 
auch wenn man es mit Einzelschritten durch steppt oder wenn man einen 
Breakpoint bei Mat image setze.

von Jojo S. (Gast)


Lesenswert?

Manuel Volk schrieb:
> Das Programm "[4728] New_OpenCV.exe: Systemeigen" wurde mit Code
> -1073741701 (0xc000007b) beendet.

Da ist doch ein konkreter Fehlercode. Dummerweise scheint der viele 
Ursachen haben zu können.
Hier scheinen plausible Erklärungen zu stehen:
http://stackoverflow.com/questions/10492037/the-application-was-unable-to-start-correctly-0xc000007b

'The most common cause of this error is trying to load a 64 bit DLL into 
a 32 bit process, or vice versa.'

Hast du die richtigen Libs (64Bit) benutzt?

von Manuel Volk (Gast)


Lesenswert?

Ja genau das hatte ich auch vermutet. Ich lade im bin Verzeichnis der 
Bibliothek die für Version 64, da ich VS2010 64 bit Version installiert 
habe. Die lib lade ich aber in 32, da es ja für 32 bit kompeliert wird 
so weit ich das weiß. Bin halt so vorgegangen wie es im Video 
beschrieben wird. Ist das soweit korrekt oder steckt der Fehler dort 
egent wie?

von Jojo S. (Gast)


Lesenswert?

habe das gerade nachvollzogen, ist genau so. Habe auch den Suchpfad auf 
X64\bin gesetzt und bekomme dann den Fehler wie bei dir wenn ich die 
32Bit App erstelle und starte. Den Suchpfad auf X86 umgeschaltet, VS neu 
starten und es läuft. Es kann noch einen Fehler geben wenn das 
VideoCapture Device nicht geöffnet werden kann, das Beispiel verzichtet 
ja auf jegliche Fehlerbehandlung.

von Manuel Volk (Gast)


Lesenswert?

Ah bessten dank. Ja das war mal ein kleiner Fehler großes Problem.
Danke.

Wo ich schonmal dabei bin. Kann mir jemand ein Tutorial bzw. etwas 
empfehlen, um OpenCV soweit zu meistern das ich ein Gesichttracking 
programmiern kann und dann vielleicht noch durch Eigengesichter 
Gesichtsdetektion implementiern kann?

von Jojo S. (Gast)


Lesenswert?

hier ist ein Schmöker der auch Face recognition behandelt:
http://www.amazon.de/Mastering-OpenCV-Practical-Computer-Projects/dp/1849517827/ref=sr_1_4?ie=UTF8&qid=1359546389&sr=8-4#_

wie gut das ist kann ich dir aber nicht sagen.

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.