找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2489|回复: 0
打印 上一主题 下一主题
收起左侧

Delphi图像二值化分享处理

[复制链接]
跳转到指定楼层
楼主
ID:583148 发表于 2019-7-23 19:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
图像的灰度化处理的基本原理

将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。图像的灰度化处理可用两种方法来实现。

第一种方法使求出每个像素点的R、G、B三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量。

第二种方法是根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应:Y=0.3R+0.59G+0.11B,以这个亮度值表达图像的灰度值。

二、用Delphi进行图像灰度化的实现:

procedure TForm1.BitBtn1Click(Sender: TObject);

var

  p:PByteArray;

  //PByteArray的定义格式


  //PByteArray = ^TByteArray;


  //TByteArray = array[0..32767] of Byte;


  ChangedBmp : Tbitmap;

  gray,x,y:integer;

  TestBMP : Tbitmap;   // 处理过程中位图

begin

  TestBMP:=Tbitmap.Create;

  ChangedBmp:=Tbitmap.Create;

  TestBMP.Assign(image1.Picture);

  for y := 0 to TestBMP.Height - 1 do

  begin

        //获取每一行象素信息

    p := TestBMP.scanline[y];

    for x := 0 to TestBMP.Width - 1 do

    begin

    //这里采用YUV与RGB颜色空间变换的方法,即 Y=0.3R+0.59G+0.11B

      Gray := Round(p[3 * x + 2] * 0.3 + p[3 * x + 1] * 0.59

            + p[3 * x] * 0.11);

    //由于是24位真彩色,故一个像素点为三个字节

      p[3 * x + 2] := byte(Gray);

      p[3 * x + 1] := byte(Gray);

      p[3 * x] := byte(Gray);

    //Gray的值必须在0~255之间

    end;

      ChangedBmp.Assign(TestBMP);

      PaintBox1.Canvas.CopyMode:=srccopy;

      PaintBox1.Canvas.Draw(0,0,ChangedBmp);//用PaintBox控件重新绘制图像;

  end;

三、注意事项:

程序申请了TestBMP、WillbeChangedBmp,所以在程序初始化的时候,要注意创建:

       TestBMP:=Tbitmap.Create;

ChangedBmp:=Tbitmap.Create;

     程序结束后注意要把TestBMP.Destory和ChangedBmp.Destory;





评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表