机器视觉入门之路(四四,图像buffer,感兴趣区域(ROI))

前面只提到加载8位灰度bmp图像,以下是24位灰度图像的加载和24位rgb(红绿蓝三色)图像转灰度图像的加载,作以补充。因为你操作的是图像buffer(8位图像数组),所以,此处是把bmp加载到buffer中。 

 string path = Environment.CurrentDirectory;
                     realtimeImage.Image = Bitmap.FromFile(curFileName);

 glob_curBitmap = (Bitmap)realtimeImage.Image;

                     Rectangle rc = new Rectangle(0, 0, glob_curBitmap.Width, glob_curBitmap.Height);
                     System.Drawing.Imaging.BitmapData bmpdata = glob_curBitmap.LockBits(rc,
                           System.Drawing.Imaging.ImageLockMode.ReadWrite,
                           glob_curBitmap.PixelFormat);
                     IntPtr imageptr = bmpdata.Scan0;
                     int ww = glob_curBitmap.Width;
                     int hh = glob_curBitmap.Height;
                     int bytes=0;
                     if (glob_curBitmap.PixelFormat == PixelFormat.Format24bppRgb)
                     {
                         bytes = ww * hh * 3;//此处针对的是24位位图
                     }
                     if (glob_curBitmap.PixelFormat == PixelFormat.Format8bppIndexed)
                     {
                         bytes = ww * hh;
                     }
                     glob_rgbValues = new byte[bytes];
                     glob_buffer8 = new byte[ww * hh];
                     System.Runtime.InteropServices.Marshal.Copy(imageptr, glob_rgbValues, 0, bytes);
                     glob_curBitmap.UnlockBits(bmpdata);
                     if (glob_curBitmap.PixelFormat == PixelFormat.Format24bppRgb)
                     {
                         for (int j = 0; j < hh; j++)
                         {
                             for (int i = 0; i < ww; i = i + 1)
                             {
                                 int nn = j * ww + i;
                                 glob_buffer8[nn] = glob_rgbValues[nn * 3];//此处是24位灰度图像(黑白)
                           //此处glob_rgbValues[nn * 3+0]=glob_rgbValues[nn * 3+1]=glob_rgbValues[nn * 3+2]

                             }
                         }
                     }

  if (glob_curBitmap.PixelFormat == PixelFormat.Format8bppIndexed)
                     {
                         for (int j = 0; j < hh; j++)
                         {
                             for (int i = 0; i < ww; i = i + 1)
                             {
                                 int nn = j * ww + i;
                                 glob_buffer8[nn] = glob_rgbValues[nn ];//此处是8位灰度图像
                             }
                         }
                     }

注: glob_rgbValues[nn * 3];//蓝色分量

glob_rgbValues[nn * 3+1];//绿色分量

glob_rgbValues[nn * 3+2];//红色分量

//此处是24位rgb图像转8位灰度图像

   glob_buffer8[nn] = glob_rgbValues[nn * 3]*0.114+glob_rgbValues[nn * 3+1]*0.587+glob_rgbValues[nn * 3+2]*0.299;//彩色

如果是32位图像,则

glob_rgbValues[nn * 4];//蓝色分量

glob_rgbValues[nn * 4+1];//绿色分量

glob_rgbValues[nn * 4+2];//红色分量

glob_rgbValues[nn * 4+3];//alpha分量

   bytes = ww * hh * 4;//此处针对的是32位Argb位图

   for (int j = 0; j < hh; j++)
                         {
                             for (int i = 0; i < ww; i = i + 1)
                             {
                                 int nn = j * ww + i;
                                 glob_buffer8[nn] = glob_rgbValues[nn * 4];//此处是32位灰度图像(黑白);以下注释掉的是32位argb图像(彩色)

// glob_buffer8[nn] = glob_rgbValues[nn * 4]*0.114+glob_rgbValues[nn * 4+1]*0.587+glob_rgbValues[nn * 4+2]*0.299;

//不用glob_rgbValues[nn * 4+3]alpha分量
                             }
                         }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值