如何在.net中将位图转换为MWArray(Matlab Array)
本文关键字:MWArray Matlab Array 转换 位图 net | 更新日期: 2023-09-27 17:52:48
我在Matlab上写了一个算法。因此我想在。net上使用它。我完美地将。m文件转换为。dll,以便在。net上使用Matlab库编译器。首先,我尝试将Matlab函数转换为没有任何参数的。dll,它在。net上工作得很好。然而,当我想使用带参数的函数时,我在下面得到一些错误。参数基本上是image。我在Matlab中像这样调用函数I = imread('xxx.jpg'); Detect(I);
所以我的c#代码像这样
static void Main(string[] args)
{
DetectDots detectDots = null;
Bitmap bitmap = new Bitmap("xxx.jpg");
//Get image dimensions
int width = bitmap.Width;
int height = bitmap.Height;
//Declare the double array of grayscale values to be read from "bitmap"
double[,] bnew = new double[width, height];
//Loop to read the data from the Bitmap image into the double array
int i, j;
for (i = 0; i < width; i++)
{
for (j = 0; j < height; j++)
{
Color pixelColor = bitmap.GetPixel(i, j);
double b = pixelColor.GetBrightness(); //the Brightness component
bnew.SetValue(b, i, j);
}
}
MWNumericArray arr = bnew;
try
{
detectDots = new DetectDots();
detectDots.Detect(arr);
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
我使用了我称为xxx.jpg的相同图像,它是5312 x 2988。但是我在下面得到这个错误。
... MWMCR::EvaluateFunction error ...
Index exceeds matrix dimensions.
Error in => DetectDots.m at line 12.
... Matlab M-code Stack Trace ...
at
file C:'Users'TAHAME~1'AppData'Local'Temp'tahameral'mcrCache9.0'MTM_220'MTM'DetectDots.m, name DetectDots, line 12.
重要的是,它说"索引超过矩阵维度",这是真正的方式转换位图到MWArray?有什么问题吗?
我意识到c#中的行对应于MWarray中的列。所以我对代码做了一些小改动。
我用double[,] bnew = new double[height, width];
代替double[,] bnew = new double[width, height];
我用bnew.SetValue(b, j, i);
代替bnew.SetValue(b, i, j);
有人可能会在
下面使用Bitmap to MWArray的整个代码 Bitmap bitmap = new Bitmap("001-2.bmp");
//Get image dimensions
int width = bitmap.Width;
int height = bitmap.Height;
//Declare the double array of grayscale values to be read from "bitmap"
double[,] bnew = new double[height, width];
//Loop to read the data from the Bitmap image into the double array
int i, j;
for (i = 0; i < width; i++)
{
for (j = 0; j < height; j++)
{
Color pixelColor = bitmap.GetPixel(i, j);
double b = pixelColor.GetBrightness(); //the Brightness component
//Note that rows in C# correspond to columns in MWarray
bnew.SetValue(b, j, i);
}
}
MWNumericArray arr = bnew;