Komische OpenCV Exception beim deklarieren einer cv::Mat
-
Hi Leute,
Heute wollte ich mal wieder mit OpenCV was machen. Zur Übung wollte ich mal einfach nur eine cv::Mat erstellen und sie nachher ein bisschen bearbeiten. Dazu habe ich OpenCV 2.4.2 genutzt, da ich diese Version noch kompiliert vorliegen hatte. Nun startete ich mein Programm und es stürzte mit folgender Meldung ab:OpenCV Error: Assertion failed (0 <= d && d <= CV_MAX_DIM && _sizes) in create, file C:/slave/builds/WinInstallerMegaPack/src/opencv/modules/core/src/matrix.cpp , line 187 terminate called after throwing an instance of 'cv::Exception' what(): C:/slave/builds/WinInstallerMegaPack/src/opencv/modules/core/src/matr ix.cpp:187: error: (-215) 0 <= d && d <= CV_MAX_DIM && _sizes in function create
Da dachte ich mir: Vielleicht bringt ja eine neuere, mit meiner MinGW Installation kompilierte, Version von OpenCV etwas -> OpenCV 2.4.6 Sources runter geladen und mit CMake GUI kompiliert.
Selbes Problem.
Mein Code zum erstellen der Matrix:cv::Mat img(outWidth, outHeight, CV_8UC3);
Ich hoffe ihr könnt mir helfen, Danke im Voraus
MfG
DragonRaider
-
Da dachte ich mir: Vielleicht bringt ja eine neuere, mit meiner MinGW Installation kompilierte
Ach, du dachtest also der Fehler liegt nicht bei dir ...
Was sind denn die Werte fuer
outWidth
undOutHeight
?
-
Hi knivil,
Bist ja echt nett xD naja wenigstens versuchst du mir zu helfen outWidth und outHeight sind beides Integer mit Werten so ca.int outWidth = 11400; int outHeight = 8200;
Circa weil die Werte aus der Multiplikation eines Doubles mit 100 resultieren.
MfG
DragonRaiderEdit: Man könnte dein "Ach, du dachtest also der Fehler liegt nicht bei dir ..." durchaus auch beleidigend sehen.
-
http://stackoverflow.com/questions/13235855/opencv-mat-cv-max-dim-in-function-setsize
Ansonsten ist die naechste Frage, wie gross CV_MAX_DIM ist. Und dann ist noch die Frage, wie er d berechnet.
Bei mir ist MAX_DIM 32, ich nehme mal an, das bedeutet 32 MByte. Unter der Annahme, dass CV_8UC3 fuer 3 unsigned chars pro Pixel steht, ist dein Bild etwa 68 MByte gross. D.h. 32 < 68.
Edit: Man könnte dein "Ach, du dachtest also der Fehler liegt nicht bei dir ..." durchaus auch beleidigend sehen.
Willkommen im Internet. Wer den Schaden hat, muss fuer den Spott nicht sorgen ... oder so. Es klingt so, als ob du Windows/Linux neu installierst, nur weil dein kleines selbstgeschriebenes Programm nicht funktioniert.
-
Hi,
Ich mach das Bild jetzt mal kleiner...
MfG
DragonRaiderEdit 1:
Was du nicht willst, was man dir tu, das füg auch keinem anderen zu.
Also: Gefällt es dir, dass es im Internet so abgeht?
Edit 2:
Die Größe meiner Matrix entspricht jetzt raw ca. 9MB, bei mir liegt MAX_DIM bzw. CV_MAX_DIM auch bei 32MB. Also: 9MB < 32MB. Daran liegt es also nicht (mehr).
-
D.h. 32 < 68
Eigentlich wäre 68 > 32 logischer
You made my day.
-
Also wenn ich in die Sourcen schaue, dann ist meine Interpretation was MAX_DIM und d angeht falsch. CV_MAX_DIM ist die Dimension deines Arrays, sollte also 2 sein. D.h. der Fehler liegt woanders. Vielleicht solltest du ein Minimalbeispiel angeben, bei dem der Fehler reproduzierbar auftritt. Ansonsten waere die Angabe der OpenCV-Version und der Compiler hilfreich.
-
Hi,
Mein OS ist Windows 7 Professional 64bit. Ich arbeite mit der IDE CodeBlocks und dem Compiler MinGW(mingw32-g++ Version 4.7.1). Meine OpenCV Version ist 2.4.6.0. Ich hoffe, das hilft. Gerade habe ich, zum Testen, mal im selben Projekt eine kleine Testmatrix(Wie wird das geschrieben?) deklariert u. definiert, was den gleichen Fehler/die gleiche Exception verursacht. Hier der Code:cv::Mat testImg(100, 100, CV_8U, cv::Scalar(0, 0, 0));
Ich teste das Ganze gleich noch mal in nem neuen Projekt, vielleicht liegt's ja auch an meinem Projekt.
MfG
DragonRaider
-
Sooo,
Im extra Testprogramm funktioniert's auch nicht. Der Code:#include <iostream> #include "opencv2/core/core.hpp" using namespace cv; using namespace std; int main() { Mat img(10, 10, CV_8U, Scalar(0, 0, 0)); return 0; }
MfG
DragonRaider
-
Hi,
Könnte das auch an meiner libstdc++-6.dll liegen? Ich hatte bis jetzt noch die Alte im Ordner, jedoch habe ich sie nun gelöscht -> Prozedureinsprungspunkt nicht gefunden. Jedoch habe ich MinGW/bin schon zu meiner %path% Variable hinzugefügt....
MfG
DragonRaiderPS: Schon mal an Alle, die versucht haben mir zu helfen: Danke
-
viellicht
Mat img(10, 10, CV_8U, Scalar(0));
-
@basc_guesst: Jo, richtig. CV_8U ist das gleiche wie CV_8UC1. Hab DragonRaiders code aber mal bei mir getestet, und zumindest hier gabs damit trotzdem kein Problem.
@DragonRaider: Versuchs mal mit basc_guessts Tipp. Wenn das auch nicht hilft, würde ich empfehlen, nochmal from scratch anzufangen. Vielleicht in ner frischen Virtualbox zum Testen. Wer weiß, was für dlls da mittlerweile bei dir überall rumfliegen.
-
Hi,
ich dachte eigentlich, ich müsse einem cv::Scalar 3 Werte übergeben(rot, grün, blau)... Naja das hat mir auch keine Abhilfe verschafft. Ne Virtual Box ist schwierig, da ich keine Windows Lizenz mehr da habe. Jedoch läuft das System auch noch nicht sehr lang(so ca. ein halbes Jahr).
MfG
DragonRaider
-
Code::Blocks läuft auch unter Linux, wovon es auch schon fertige VDIs für die Boxen gibt, so wie diese hier.
http://virtualboximages.com/LinuxMint+15+Mate+32bit+VirtualBox+VDI+Virtual+Computer
-
Hallo, ich habe gerade diesen thread gefunden. Da ich bei mir das gleich problem habe (auch mingw), wollte ich mal nachfragen wo nun mein fehler ist. Bzw. was hat bei Dir geholfen. Danke im voraus.
-
Hi,
es tut mir sehr leid, dir nicht helfen zu können, jedoch war es mir nicht möglich, dieses Problem zu lösen
MfG
DragonRaider