图像的二值化,无论是理论,还是方法都很多,网上搜索一大堆,本人水平有限,没法完全搞清楚,只在这里针对GDI+在Delphi中如何做一般二值化处理,写一个简单例子。
其实,这个例子在昨天本人发表的《GDI+ 在Delphi程序的应用 -- ColorMatrix与图像灰度化》中已经给出了基本的代码,只要在其上加一个参数和一句代码就行了:
// 灰度或者二值化彩色图像
procedureGrayImage(Image:TGpImage;Threshold:Single=0.0);
const
ColorMatrix:TColorMatrix=
((0.3,0.3,0.3,0.0,0.0),
(0.59,0.59,0.59,0.0,0.0),
(0.11,0.11,0.11,0.0,0.0),
(0.0,0.0,0.0,1.0,0.0),
(0.0,0.0,0.0,0.0,1.0));
var
Tmp:TGpImage;
attr:TGpImageAttributes;
g:TGpGraphics;
begin
Tmp:=Image.Clone;
g:=TGpGraphics.Create(Image);
attr:=TGpImageAttributes.Create;
try
attr.SetColorMatrix(ColorMatrix); //灰度化
ifThreshold>0.0then // 如果给出了阀值,在灰度图基础上二值化
attr.SetThreshold(Threshold);
g.DrawImage(Tmp,GpRect(0,0,Image.Width,Image.Height),
0,0,Tmp.Width,Tmp.Height,utPixel,attr);
finally
g.Free;
attr.Free;
Tmp.Free;
end;
end;
procedureTForm1.Button1Click(Sender:TObject);
var
Image:TGpImage;
g:TGpGraphics;
begin
Image:=TGpImage.Create('..mediaFRUIT.jpg');
g:=TGpGraphics.Create(Handle,False);
g.DrawImage(Image,10,10,Image.Width,Image.Height);
GrayImage(Image,0.5);
g.DrawImage(Image,220,10,Image.Width,Image.Height);
g.Free;
image.Free;
end;
从例子可以看出,彩色图像二值化,就是在其灰度化基础上给定一个0 - 1之间的阀值,所谓阀值就是每种颜色成分的分界点。假定阈值设置为 0.7,并且假定当前所呈现的颜色中的红色、绿色和蓝色成分分别为 230、50 和 220,那么红色成分 230 大于 0.7x255,因此,红色成分将更改为 255(全亮度);绿色成分 50 小于0.7x255,因此,绿色成分将更改为 0;蓝色成分 220 大于 0.7x255,因此,蓝色成分将更改为 255。
由此可以看出,在正确得到灰度图图后,二值化程度的关键就在这个阀值。所以关于如何确定阀值的理论也就成立图像二值化最主要的理论。
本例子的阀值为0.5。,运行效果如下图:
分享到:
相关推荐
GDI+入门指导书------经典 非常适合于GDI+初学者
windwos C++ gdi++实现jpg图像压缩-图像裁剪和缩放-图像格式转换-图像dpi修改
——在GDI+ Painter应用程序中添加颜色、钢笔和画笔 总结 第5章 颜色、字体和文本 5.1 访问Graphics对象 5.2 使用颜色 5.3 使用字体 5.4 使用文本和字符串 5.5 渲染文本的质量和性能 5.6 高级版式 5.7 一个...
DELPHI版的GDI++库,内有Demos.
使用GDI+进行图形缩放、拖动,多种图片格式支持,仅简单示例。 问题源贴:http://bbs.csdn.net/topics/390638094
使用Delphi+GDI实现图片的镜像翻转,有需要的可以试试。
——在GDI+ Painter应用程序中添加颜色、钢笔和画笔 总结 第5章 颜色、字体和文本 5.1 访问Graphics对象 5.2 使用颜色 5.3 使用字体 5.4 使用文本和字符串 5.5 渲染文本的质量和性能 5.6 高级版式 5.7 一个...
WINDOWS GDI和GDI+编程实例剖析. - READ
GDI+是伴随Windows XP系统...但是,对于Delphi和C++Builder所共用的VCL来说,由于VCL通过TCanvas、TBitmap和TImage等及其相关的类,把传统的GDI封装的几乎无可挑剔,类似C++的GDI+类,在易操作上就没什么优势可言了。
GDI+ for VCL 是一个基于 GDI+ 的图形处理库,专门为 C++ Builder 和 Delphi 开发环境设计,提供了许多实用的图形处理函数和类库,帮助开发者快速开发图形相关的应用程序。 GDI+ for VCL 基础 -- 图像显示辅助类 ...
GDI+程序设计.pdf,书籍和随书源码。
GDI+程序设计 GDI+程序设计 GDI+程序设计 GDI+程序设计
教你在VC下如何使用GDI+进行 图像程序设计,是整理的比较全的资料。
在Delphi中使用GDI+,范例中包含GDI+各种效果的测试。
一本为C#开发人员准备的图形图像处理技术的书籍
其中,ULONG_PTR是一个DWORD数据类型,该成员变量用来保存GDI+被初始化后在应用程序中的GDI+标识,以便能在应用程序退出后,引用该标识来调用Gdiplus:: GdiplusShutdown来关闭GDI+。 (2)在应用类中添加...
只需将pas下的文件添加到程序中即可,在delphi XE10.2版本中可正确使用
Delphi GDI+
Delphi使用GDI+制作任意图片形状(PGN图形)窗口