Ich hole Infrarot-Frames von einer Kinect V2-Kamera. Die Rahmen werden in Form von WritableBitmap, also versuche ich es mit diesem Code zu konvertieren, die ich gemacht:Konvertieren von WriteableBitmap zu Mat für dann zeigt es in einem Fenster mit CvInvoke.Imshow?
public Mat WritableBitmapToMat(WriteableBitmap writeBmp)
{
Bitmap bmp;
using (MemoryStream outStream = new MemoryStream())
{
BitmapEncoder enc = new BmpBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create((BitmapSource)writeBmp));
enc.Save(outStream);
bmp = new Bitmap(outStream);
}
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat);
IntPtr data = bmpData.Scan0;
int step = bmpData.Stride;
Mat mat = new Mat(bmp.Height, bmp.Width, Emgu.CV.CvEnum.DepthType.Cv32F, 4, data, step);
bmp.UnlockBits(bmpData);
return mat;
}
Ich weiß nicht, ob es ein Problem mit der Umwandlung ist, aber wenn ich versuche, das Bild zu zeigen, in einem Fenster mit diesem Code:
CvInvoke.Imshow("window showing a picture", infraredMat);
ich eine Ausnahme am Ende immer die wie folgt aussieht:
Ausnahme: Exception geworfen: 'System.AccessViolationException' in Emgu.CV.World.dll ("Versuchte um geschützten Speicher zu lesen oder zu schreiben Dies ist oft ein Hinweis darauf, dass anderer Speicher c ist orrupt. ").
Ich möchte auch erwähnen, ich bin mit EmguCV 3.1 und Kinect SDK 2.0
Vielen Dank im Voraus für jede Hilfe, die ich bekommen.
Haben Sie versucht, unsicheren Code/Methode zu verwenden? Da Sie direkt auf die Speicherbits zugreifen, könnte dies ein Problem darstellen. –
Ich weiß, dass das Kontrollkästchen, das besagt: "unsafe code erlauben", aktiviert ist. Sollte ich auch vor meiner Methode unsicher hinzufügen? – lolistic
Ich habe versucht, vor meiner Methode unsicher hinzuzufügen. Hat leider nicht funktioniert. – lolistic