-
Notifications
You must be signed in to change notification settings - Fork 56
Open
Description
This code works fine with SharpCV 0.7.0 but cannot compile with the newer versions:
Cannot implicitly convert type 'Tensorflow.NumPy.NDArray' to 'NumSharp.NDArray'
public static NumSharp.NDArray _AsNDArray0(this OpenCvSharp.Mat mat)
{
return new SharpCV.Mat(mat.CvPtr).GetData();
}This is a 10 times slower alternative for the ones who have to use SharpCV > 0.7.0
public static NumSharp.NDArray AsNDArray_slow(this OpenCvSharp.Mat mat)
{
var matType = mat.Type();
var channels = mat.Channels();
var size = mat.Rows * mat.Cols * channels;
var shape = channels == 1 ? new Shape(mat.Rows, mat.Cols) : new Shape(mat.Rows, mat.Cols, channels);
if (matType == MatType.CV_32SC1 || matType == MatType.CV_32SC2)
{
var managedArray = new int[size];
Marshal.Copy(mat.Data, managedArray, 0, size);
var aslice = ArraySlice.FromArray(managedArray);
return new NumSharp.NDArray(aslice, shape);
}
if (matType == MatType.CV_32FC1)
{
var managedArray = new float[size];
Marshal.Copy(mat.Data, managedArray, 0, size);
var aslice = ArraySlice.FromArray(managedArray);
return new NumSharp.NDArray(aslice, shape);
}
if (matType == MatType.CV_64FC1)
{
var managedArray = new double[size];
Marshal.Copy(mat.Data, managedArray, 0, size);
var aslice = ArraySlice.FromArray(managedArray);
return new NumSharp.NDArray(aslice, shape);
}
if (matType == MatType.CV_8UC1 || matType == MatType.CV_8UC3 || matType == MatType.CV_8UC4)
{
var managedArray = new byte[size];
Marshal.Copy(mat.Data, managedArray, 0, size);
var aslice = ArraySlice.FromArray(managedArray);
return new NumSharp.NDArray(aslice, shape);
}
throw new Exception($"mat data type = {matType} is not supported");
}Metadata
Metadata
Assignees
Labels
No labels