Итак, наконец-то мне удалось закончить этот код ... решение было довольно простым: после получения переменной mat
мы можем просто получить Data
из Mat
в виде числа с плавающей запятой [,,,] массив: float[,,,] flt = (float[,,,])mat.GetData();
или просто использовать одномерный массив: float[] flt = (float[])mat.GetData(jagged:false)
(но я предпочитаю предыдущий)
Чем просто заставить oop бросить этот массив:
for (int x = 0; x < flt.GetLength(2); x++)
{
if (flt[0, 0, x, 2] > 0.1)
{
int left = Convert.ToInt32(flt[0, 0, x, 3] * cols);
int top = Convert.ToInt32(flt[0, 0, x, 4] * rows);
int right = Convert.ToInt32(flt[0, 0, x, 5] * cols);
int bottom = Convert.ToInt32(flt[0, 0, x, 6] * rows);
image1.Draw(new Rectangle(left, top, right - left, bottom - top), new Bgr(0, 0, 255), 2);
}
}
* 1010 И, наконец, мы можем сохранить это изображение:
image1.Save("testing-1.png");
Итак, код результата будет выглядеть так:
using (Image<Bgr, byte> image1 = new Image<Bgr, byte>("testing.png"))
{
int interception = 0;
int cols = image1.Width;
int rows = image1.Height;
Net netcfg = DnnInvoke.ReadNetFromTensorflow(Directory.GetCurrentDirectory() + @"\fldr\CO.pb", Directory.GetCurrentDirectory() + @"\fldr\graph.pbtxt");
netcfg.SetInput(DnnInvoke.BlobFromImage(image1.Mat, 1, new System.Drawing.Size(300, 300), default(MCvScalar), true, false));
Mat mat = netcfg.Forward();
float[,,,] flt = (float[,,,])mat.GetData();
for (int x = 0; x < flt.GetLength(2); x++)
{
if (flt[0, 0, x, 2] > 0.1)
{
int left = Convert.ToInt32(flt[0, 0, x, 3] * cols);
int top = Convert.ToInt32(flt[0, 0, x, 4] * rows);
int right = Convert.ToInt32(flt[0, 0, x, 5] * cols);
int bottom = Convert.ToInt32(flt[0, 0, x, 6] * rows);
image1.Draw(new Rectangle(left, top, right - left, bottom - top), new Bgr(0, 0, 255), 2);
}
}
image1.Save("testing-1.png");
}