欢迎来到天天文库
浏览记录
ID:14514935
大小:662.50 KB
页数:23页
时间:2018-07-29
《24位真彩色转换为8位灰度图片(完整代码)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、24位真彩色转换为8位灰度图片(完整代码)分类: C#2011-03-0409:29 4343人阅读 评论(5) 收藏 举报nullfloatgdi+byte图像处理image图像的灰度与二值化http://www.cnblogs.com/maozefa/archive/2011/12/09/2281656.html 图像的灰度化与二值化是图像处理中最常见的处理方法,也是很多图像处理方法的基础,如图像灰度统计、图像识别等。 图像的灰度化与二值化方法较多,处理过程也比较简单。但切不可因其简单而忽视效率。如常用的图像灰度计算公式:gray=red*0.299+green
2、*0.587+blue*0.114,如果在程序代码中直接套用了这个公式,因浮点数的缘故导致代码执行效率较低,如改为定点整数运算,可使执行效率大大提高。 下面是图像的灰度与二值化代码:// 定义ARGB像素结构typedefunion{ ARGBColor; struct { BYTEBlue; BYTEGreen; BYTERed; BYTEAlpha; };}ARGBQuad,*PARGBQuad;//---------------------------------------------------
3、------------------------// 图像数据data灰度化VOIDGray(BitmapData*data){ PARGBQuadp=(PARGBQuad)data->Scan0; INToffset=data->Stride-data->Width* sizeof(ARGBQuad); for (UINTy= 0;yHeight;y++,(BYTE*)p+=offset) { for (UINTx= 0;xWidth;x++,p++) p->Blue=p->Green=p->
4、Red= (UINT)(p->Blue* 29 +p->Green* 150 +p->Red* 77 + 128)>> 8; }}//---------------------------------------------------------------------------// 图像数据data灰度同时二值化,threshold阀值VOIDGrayAnd2Values(BitmapData*data,BYTEthreshold){ PARGBQuadp=(PARGBQuad)data->Scan0; INToffset=da
5、ta->Stride-data->Width* sizeof(ARGBQuad); for (UINTy= 0;yHeight;y++,(BYTE*)p+=offset) { for (UINTx= 0;xWidth;x++,p++) { if (((p->Blue* 29 +p->Green* 150 +p->Red* 77 + 128)>> 8)Color&= 0xff000000; else
6、 p->Color
7、= 0x00ffffff; } }}//--------------------------------------------------------------------------- 因本文使用的是32位图像数据,所以图像的二值化没有采用通常的赋值操作p->Blue=p->Green=p->Red=0(或者255),而是采用了位运算。 下面是使用BCB2007和GDI+图像数据实现图像灰度和二值化的例子代码:// 锁定GDI+位位图扫描线到dataFORCEINLINEVOIDLockBitmap(Gdipl
8、us::Bitmap*bmp,BitmapData*data){ Gdiplus::Rectr(0, 0,bmp->GetWidth(),bmp->GetHeight()); bmp->LockBits(&r,ImageLockModeRead
9、ImageLockModeWrite, PixelFormat32bppARGB,data);}//---------------------------------------------------------------------------//
此文档下载收益归作者所有