[英]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 上設置單個值有點棘手。
var matrix = new Matrix<DepthType.Cv32F>(rows, cols); matrix[0, 0] = 3;
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.