2017-12-29 17 views
0

Ich versuche, C++ OpenCV-Code in C# Emgucv zu konvertieren. Ich habe einige Zeilen konvertiert, aber ich bleibe auf der einen Zeile stecken.C# EmguCV Mat.Ptr

Mat detectionMat(detection.size[2], detection.size[3], CV_32F, detection.ptr<float>()); 

I umgewandelt wie oben

Mat detectionMat = new Mat(detection.SizeOfDimemsion[2], detection.SizeOfDimemsion[3], Emgu.CV.CvEnum.DepthType.Cv32F, detection.Ptr.ToPointer()); 

Aber ich weiß, ich habe ein Problem bei detection.Ptr.ToPointer() ich nicht konvertieren kann. Danke im Voraus.

caffe.PopulateNet(net); 

     Mat prob; 
     Mat img2 = new Mat(300,300,img.Depth,img.NumberOfChannels); 
     Emgu.CV.CvInvoke.Resize(img, img2, new Size(300, 300)); 

     //Mat inputBlob = DnnInvoke.BlobFromImage(img2,0.007843, new Size(300, 300), new MCvScalar(127.5,127.5,127.5), true); // ?? 
     Mat inputBlob = DnnInvoke.BlobFromImage(img, 0.007843, mean: new MCvScalar(127.5, 127.5, 127.5), swapRB: false); 
     net.SetInput(inputBlob, "data"); 

     Mat detection = net.Forward("detection_out"); 
     Mat detectionMat = new Mat(detection.SizeOfDimemsion[2], detection.SizeOfDimemsion[3], Emgu.CV.CvEnum.DepthType.Cv32F, detection.ptr<float>()); 

     double confidenceThreshold = 0.2; 

Antwort

0

@Musa, welche Version von Emgu CV verwenden Sie. In der letzten Zeit gibt es keinen Mat-Konstruktor, der die von Ihnen angegebenen Parameter übernimmt. Sie haben die Wahl zwischen:

Mat Constructor (Int32, Int32, DepthType, Int32) 
Mat Constructor (Int32[], DepthType, IntPtr,IntPtr[]) 
Mat Constructor (Size, DepthType, Int32, IntPtr, Int32) 
Mat Constructor (Int32, Int32, DepthType, Int32, IntPtr, Int32) 

Ich vermute, dass Sie die letzte verwenden wollen. Wenn dies der Fall ist, ist dies ein IntPtr für Ihre Daten. Aber nicht zu wissen, was die Daten sind, kann ich nicht viel helfen. Es wäre sehr hilfreich zu wissen, was Erkennung ist, oder ein komplettes Code-Snippet.

EDIT: Musa, ich denke, ich sehe, was Sie versuchen, obwohl ich nicht mit dem DNN-Teil von EmguCV gearbeitet habe. Sie haben ein Mat-Objekt als Ergebnis des Aufrufs net.Forward(). Ich glaube, Sie könnten die folgende versuchen und sehen, ob es hilft:

Mat detectionMat = new Mat(detection.SizeOfDimemsion[2], detection.SizeOfDimemsion[3], Emgu.CV.CvEnum.DepthType.Cv32F, detection.NumberOfChannels, detection.DataPointer, detection.Step); 

Doug

+0

Danke für Ihre Antwort, ich bin mit Version 3.3.0 die EmguCV. Ich werde auch die Frage mit allen Codezeilen bearbeiten. Danke für die Aufmerksamkeit – Musa

+0

Ok Ich habe den Code – Musa

+0

bearbeitet Ich werde nach dem ich auch über den letzten Stand informieren. Danke für Ihr Interesse – Musa