它说这句有问题: 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++;
}
学渣求大神指教!!!!
要么断点,要么输出日志
看看索引在哪越界的