簡體   English   中英

EmguCV 將特定值設置為 Mat C#

[英]EmguCV setting specific value to Mat C#

我在 C# 中使用 EmguCV 創建深度神經網絡,為了訓練所述神經網絡,我需要將標簽放入Mat格式。 我已經像這樣創建了我的墊子:

Mat responses = Mat.Zeros(trainData.Rows, distinctLabelCount.Count, Emgu.CV.CvEnum.DepthType.Cv32F, 1);

如果我理解正確,它會創建大小為零的Mat (400,10) 作為float類型和灰度值。

現在我有 400 行輸入數據和 10 個標簽,我需要在某些位置替換0值以將正確的 label 編碼到墊子中。 就像在 position (0,1) 的值為 1,,, position (3,5) 為第四行設置 label 5 等。

到目前為止,我在谷歌上看到的只是方法responses.at<float>(...); ,但這可能在 C++ 中,我似乎無法在 C# 中訪問該方法。 所以我不知道如何在 Mat 中編輯值。

任何幫助將不勝感激,感謝您的閱讀並感謝您的時間。

等價於 C# 中的 c++ opencv at() 是索引運算符:

像素 = 圖像 [x, y]

圖像[x, y] = 像素;

您可以使用Marshal.Copy將行r和列c的值更改為newvalue ,如下所示:

float newvalue = 1;
float [] mv = new float [] { newvalue };
Marshal.Copy(mva, 0, responses.DataPointer + (r * responses.Cols + c) * responses.ElementSize, 1);

在 Mat 上設置單個值有點棘手。

  • 您可以使用 Matrix<DepthType.Cv32F> class 代替 Mat。
     var matrix = new Matrix<DepthType.Cv32F>(rows, cols); matrix[0, 0] = 3;
  • 或者設置作為 Mat object 下方的 flot[,] 數組的值。
     var imagedata = new float[rows, cols]; GCHandle imageDataHandle = GCHandle.Alloc(imagedata, GCHandleType.Pinned); var m = new Mat(rows, cols, DepthType.Cv32F, imageDataHandle.AddrOfPinnedObject()); imagedata[0, 0] = 3; imageDataHandle.Free();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM