Im Folgenden Code berechne ich zweimal die Disparitätenbilder, aber im unteren Teil des Codes führt die Berechnung zu einen Fehler entweder einer "System.AccessViolationException" oder einer EmguCV Exception ohne Fehlermeldungstext oder innere Exception. Was unterscheidet aber beide Codestellen voneinander?
Im oberen lade ich die Bitmaps frisch von der Platte unten hingegen sind beide Bilder bereits als Bitmap geladen und dann in einer Picturebox verstaut worden. Gleiches gilt für die AlgoKlasse "StereoBM" oben wird sie frisch angelegt wärend unten sie mit den gleichen Einstellungen bereits initialisiert wurde. Wieso sollte es für Emgu\OpenCV einen unterschied machen ob ein Bitmap frischgeladen wurde oder nicht.
Hat einer Erfahrungen mit der Stereobild-Verarbeitung mit Emgu und OpenCV?
Code: Alles auswählen
Size s = new System.Drawing.Size(640, 480);
//---------------------------------------------------------------------------------------------------
// OBEN
Image<Gray, byte> imageLeft;
Image<Gray, byte> imageRight;
Image<Gray, short> disparityImage = new Image<Gray, short>(s);
Bitmap bmpL = new Bitmap(@"C:\test\bin\Debug\left.bmp");
Bitmap bmpR = new Bitmap(@"C:\test\bin\Debug\right.bmp");
StereoBM stereoAlgorithm = new StereoBM(Emgu.CV.CvEnum.STEREO_BM_TYPE.CV_STEREO_BM_BASIC, 0);
imageLeft = new Image<Gray, byte>(bmpL);
imageRight = new Image<Gray, byte>(bmpR);
imageLeft = imageLeft.Resize(disparityImage.Width, disparityImage.Height);
imageRight = imageRight.Resize(disparityImage.Width, disparityImage.Height);
stereoAlgorithm.FindStereoCorrespondence(
imageLeft,
imageRight,
disparityImage);
//---------------------------------------------------------------------------------------------------
// UNTEN
Image<Gray, byte> ImgL = new Image<Gray, byte>(pic_Left.Image as Bitmap);
Image<Gray, byte> ImgR = new Image<Gray, byte>(pic_Right.Image as Bitmap);
Image<Gray, short> D = new Image<Gray, short>(s);
ImgL = ImgL.Resize(s.Width, s.Height);
ImgR = ImgR.Resize(s.Width, s.Height);
BM.FindStereoCorrespondence(
ImgL,
ImgR,
D);
pic_DBM.Image = D.ToBitmap();