博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delphi中GDI+实现图像二值化
阅读量:6300 次
发布时间:2019-06-22

本文共 1421 字,大约阅读时间需要 4 分钟。

 

//
 灰度或者二值化彩色图像
procedure
 GrayImage(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);        
//
 灰度化
    
if
 Threshold 
>
 
0.0
 
then
                        
//
 如果给出了阀值,在灰度图基础上二值化
      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
;
procedure
 TForm1.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。

    由此可以看出,在正确得到灰度图图后,二值化程度的关键就在这个阀值。所以关于如何确定阀值的理论也就成立图像二值化最主要的理论。

转载于:https://www.cnblogs.com/rogee/archive/2010/09/15/1827318.html

你可能感兴趣的文章
短址(short URL)
查看>>
第十三章 RememberMe——《跟我学Shiro》
查看>>
mysql 时间函数 时间戳转为日期
查看>>
索引失效 ORA-01502
查看>>
Oracle取月份,不带前面的0
查看>>
Linux Network Device Name issue
查看>>
IP地址的划分实例解答
查看>>
如何查看Linux命令源码
查看>>
运维基础命令
查看>>
入门到进阶React
查看>>
SVN 命令笔记
查看>>
检验手机号码
查看>>
重叠(Overlapped)IO模型
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>