谁能帮我看一下这段代码,用C#实现图像二值化的时候为什么没有将全部的图片二值化

private void button2_Click(object sender, EventArgs e)
{
{
Color c = new Color();
Bitmap box1 = new Bitmap(pictureBox1.Image);
Bitmap box2 = new Bitmap(pictureBox1.Image);
int rr, lev, wid, x, y, m;
int[] lut = new int[256];
int[, ,] pic = new int[1000, 1000, 10];
lev = 50;
wid = 100;
y = 0;
while (y <= 256)
{
for (x = 0; x <= lev - 1; x++)
{
lut[y] = 255;
y = y + 1;
if (y > 255) goto loop;

}
for (x = 0; x <= wid - 1; x++)
{
lut[y] = 0;
y = y + 1;
if (y > 255) goto loop;
}
}
loop:
for (int i = 0; i < pictureBox1.Width - 1; i++)
{
for (int j = 0; j < pictureBox1.Height - 1; j++)
{
c = box2.GetPixel(i, j);
pic[i, j, 0] = c.R;
pic[i, j, 1] = c.G;
pic[i, j, 2] = c.B;

}
}
for (int i = 0; i < pictureBox1.Width - 1; i++)
{
for (int j = 0; j < pictureBox1.Height - 1; j++)
{
m = pic[i, j, 2];
rr = lut[m];
Color c1 = Color.FromArgb(rr, rr, rr);
box2.SetPixel(i, j, c1);
}

pictureBox2.Image = box2;
}
}
}

private void btn_two_Click(object sender, EventArgs e)
        {
            Color c = new Color();
            Bitmap box1 = new Bitmap(pictureBox1.Image);
            Bitmap box2 = new Bitmap(pictureBox1.Image);
            int rr, lev, wid, x, y, m;
            int[] lut = new int[256];
            int[, ,] pic = new int[1000, 1000, 10];
            lev = 50;
            wid = 100;
            y = 0;
            while (y <= 256)
            {
                for (x = 0; x <= lev - 1; x++)
                {
                    lut[y] = 255;
                    y = y + 1;
                    if (y > 255)
                        goto loop;

                }
                for (x = 0; x <= wid - 1; x++)
                {
                    lut[y] = 0;
                    y = y + 1;
                    if (y > 255)
                        goto loop;
                }
            }
        loop:
            for (int i = 0; i < box1.Width - 1; i++)//此处应为图片的宽度
            {
                for (int j = 0; j < box1.Height - 1; j++)//此处应为图片的高度
                {
                    c = box2.GetPixel(i, j);
                    pic[i, j, 0] = c.R;
                    pic[i, j, 1] = c.G;
                    pic[i, j, 2] = c.B;

                }
            }
            for (int i = 0; i < box1.Width - 1; i++)//此处应为图片的宽度
            {
                for (int j = 0; j < box1.Height - 1; j++)//此处应为图片的高度
                {
                    m = pic[i, j, 2];
                    rr = lut[m];
                    Color c1 = Color.FromArgb(rr, rr, rr);
                    box2.SetPixel(i, j, c1);
                }

                pictureBox2.Image = box2;
            }
        }
        //由于图片的高度和宽度与你设置的pictureBox大小一致,故都应为图片的尺寸

追问

请问大神,每次输入图片进行二值化处理的时候,代码能生成成功,但是会报错“索引超出了数组界限”,求解,万分感谢

追答

不会吧,你加上try{。。。}catch{}试试,
。。。为上面图片处理的代码

温馨提示:内容为网友见解,仅供参考
无其他回答

谁能帮忙解释下C#二值化处理图片的代码?thanks!
这代码写的很低效,不过还算清晰。灰度处理那个很简单吧,基本上C#都自动帮你做了,你那代码就是手动遍历其中每个像素然后读取其灰度值(这里代码偷懒直接让C#帮忙计算了)然后重新把像素设置为RGB都是灰度值的颜色而已。二值化的其实也不复杂,也是逐个遍历像素,判断某个像素的亮度是否大于给定阈值,如果...

一幅二值化图像中怎么找到气泡的最大轮廓并且显示出来还有最大轮廓的...
可以考虑使用AForge.NET框架

二维码的识别原理是什么?能造假(仿造)吗?
二维码可以伪造,一般的二维码没有防伪功能;个人就能从网上下载二维码自动生成器,制作二维码。甚至有些不法分子设计了带病毒的二维码,窃取他人手机内的个人信息。专家建议手机用户,要有安全意识,不要轻易扫不明来源的可疑二维码。

c#图像灰度处理及二值化处理代码解释
这代码写的很低效,不过还算清晰。灰度处理那个很简单吧,基本上C#都自动帮你做了,你那代码就是手动遍历其中每个像素然后读取其灰度值(这里代码偷懒直接让C#帮忙计算了)然后重新把像素设置为RGB都是灰度值的颜色而已。二值化的其实也不复杂,也是逐个遍历像素,判断某个像素的亮度是否大于给定阈值,如果...

c#图像灰度处理及二值化处理代码解释
这代码写的很低效,不过还算清晰。灰度处理那个很简单吧,基本上C#都自动帮你做了,你那代码就是手动遍历其中每个像素然后读取其灰度值(这里代码偷懒直接让C#帮忙计算了)然后重新把像素设置为RGB都是灰度值的颜色而已。二值化的其实也不复杂,也是逐个遍历像素,判断某个像素的亮度是否大于给定阈值,如果...

相似回答