问题描述
- c#在for循环里面,它说索引超出数组界限
- 它说这句有问题: c[sum] = a[x]; d[sum] = b[x];
问题部分代码是如下:
int t;
int k;
// int s;
int y;
Image img = new Image(dast1);
Emgu.CV.Structure.MCvScalar p;
t = img.Height; //获取图片的高
k = img.Width;//获取图片的宽double[] a = new double[k*t];//用来储存像素点的x坐标值 double[] b = new double[k*t];//用来储存像素点的y坐标值 double[] c = new double[k*t];//用来储存像素点的x坐标值 double[] d = new double[k*t];//用来储存像素点的y坐标值 unsafe { //int n = 0; // int sum =k*t; double[] h = new double[k*t];//可能用来储存最后输出地x坐标 double[] z = new double[k*t];//可能用来储存最后输出地y坐标 for (int sum = 0;sum<(k*t) ; ) { c[sum] = 0; d[sum] = 0; for (int v = 0; v < 9; v++) for (y = (t / 10) * v; y < (t / 10) * (v+1); y++) //y值总行数的1/10行遍历一次 { //计算黑色点的个数,9-黑色点的个数=白色店的个数 // c[s] = 0; d[s] = 0; // for (int y = 3 * s; y < 3 * (s + 1); y++) // {//int n = 0; //计算黑色点的个数,9-黑色点的个数=白色店的个数 // for (int x = 0; x < (k / 3); x++) // { for (int x = 0; x < k; x++) { // s = (x + 3);//下面3个坐标所谓一的辅助变量 // int n = 0;//计算白色坐标点的个数 // while ((x < s) && ((x + 2) < k))//当还没到3个坐标时,并且还没遍历一行时 // { p = CvInvoke.cvGet2D(img y x);//此时p中的值就是当前像x素点rgb值,注意此时的p.val[0]为b通道p.val[1]为g p.val[2]为r // Gray color = img[y x]; if (p.v0 != 0)//如果坐标点为白色即为像素点 { //a[x] = w; b[x] = y; // n++; a[x] = x; b[x] = y; c[sum] = a[x]; d[sum] = b[x]; //为后面的排序做准备 // c[i] = a[x]; d[i] = b[x]; //0.1代表1mm // textBox1.Text = ((x / 44) - 2 + (x % 43) * 0.1).ToString() + ""&"" + ((y / 44) - 2 + (y % 43) * 0.1).ToString() + "" "" + textBox1.Text; } else { a[x] = 0; b[x] = 0; } sum++; }
学渣求大神指教!!!!
解决方案
要么断点,要么输出日志
看看索引在哪越界的
时间: 2024-10-30 18:43:16