C# EmguCV Mat.Ptr

C# EmguCV Mat.Ptr

本文关键字:Ptr Mat EmguCV      更新时间:2023-10-16

我正在尝试将C++OpenCV代码转换为C# Emgucv。我转换了一些行,但我卡在了一行上。

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

我像上面一样转换

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

但我知道我在检测方面有问题。Ptr.ToPointer(( 我无法转换。提前谢谢。

 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;

@Musa,您使用的是哪个版本的Emgu CV。在最新的中,没有采用您指定的参数的 Mat 构造函数。您可以选择:

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)

我猜你的意思是使用最后一个。如果是这样,这是您的数据的 IntPtr。但是不知道数据是什么,我帮不上什么忙。了解什么是检测或完整的代码片段将非常有帮助。

编辑:Musa,我想我明白你想做什么,尽管我没有使用 EmguCV 的 DNN 部分。由于网络,您有一个垫子对象。转发(( 调用。我想你可以尝试以下方法,看看是否有帮助:

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

道格