C#图像处理_图像遍历


最近在学习基于C#的图像处理,说白的了是使用C#对图像进行处理大笑。 头开始学图像处理环境是VC + Opencv,新手小白艰苦的把Opencv装起来了 ,用了一段时间的opencv函数,后来老师要求使用C#自己写函数实现图像处理的算法,查了很多书和资料。

现在把自己实现的,简单的图像处理的算法系统的编排下。 因为编程很菜,有些算法有些幼稚冗杂,以后会慢慢改进。

 

在写实现图像遍历前,先了解下数字图像的基本概念 以及 数字图像的基本格式

数字图像概念:http://baike.baidu.com/view/286845.htm

数字图像格式:http://baike.baidu.com/view/13674.htm   

 注:格式知道 什么是单通道 什么的多通道 以及图像实际宽度 和 系统默认的编排宽度 就行了,当然如果你能全部了解一下更好。

 

单通道图像(灰度图)一个像素占一个字节。

多通道例如 24rgb 每个色彩占各占一个字节。 (红、绿、蓝各占一个字节)

我们主要使用 24Rgb 格式。

 

初步了解了数字图像的基本概念接下来对图像进行简单的遍历。

 

源码:

        public static byte[] ChangeByte(Bitmap tp)
        {
            int w = tp.Width;   // 图像实际宽度 
            int h = tp.Height;  // 图像实际高度

            BitmapData srcdata = tp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly,
              PixelFormat.Format24bppRgb);     // 将图像锁入内存,只读,图像格式为rgb格式

            byte[] pixeData = new byte[h * w]; // 声明一个与图像等大的数组,因为每个像素点的(灰度)值
                                               // 范围为 0 - 255  所以使用byte数组
            int sride = srcdata.Stride;    // 获取图像的系统宽度(字节数)
            unsafe    // C#使用指针时需要在unsafe中使用,
            {    // C#默认不支持unsafe,使用时在项目 -》选项  -》生成中设置
                byte* temp = (byte*)srcdata.Scan0.ToPointer(); // 获取图像锁入内存的首地址

                for (int i = 0; i < h; i++)
                {
                    for (int j = 0; j < w; j++)
                    {
                        pixeData[i * w + j] = temp[0];  // 我们只获取第一个色彩的值,对于灰度图像
                                                        // red blue green 像素值相等
                        temp += 3;                      // 跳过其余两色
                    }
                    temp += sride - w * 3;              // 加上系统对齐的宽度 
                }
            }

            tp.UnlockBits(srcdata);                     // 解锁
            return pixeData;

        }

好了,通过图像遍历,将pictureBox 中的 灰度bitmap变量转变为一维数组,方便进一步的图像处理。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值