您现在的位置:首页 >> 图形媒体 >> 图形媒体 >> 内容

Delphi二值图片去杂点问题

时间:2011/9/3 15:02:45 点击:

  核心提示:由于二值图点的RGB是0或者255,可以根据一个点A的RGB值 与周围的8个点的RBG 比较 设定一个值N(0 N 8) 当A的RGB值与周围8个点的RGB相等数小于N时 此点为噪点改变其RGB值即可...
由于二值图点的RGB是0或者255,可以根据一个点A的RGB值 与周围的8个点的RBG 比较  设定一个值N(0 <N <8)  当A的RGB值与周围8个点的RGB相等数小于N时 此点为噪点改变其RGB值即可 .

附上一段代码 没具体测试。

procedure ClearNoise(Bitmap:TBitmap;N:Integer);
var
  piexl : tcolor;
  nearDots,x,y,RGBz : integer;
begin
  bitmap.Canvas.Pixels[0,0]:=rgb(255, 255, 255);
  bitmap.Canvas.Pixels[bitmap.Width - 1,bitmap.Height - 1]:=rgb(255, 255, 255);
  for x := 1 to bitmap.Width -2 do
  for y := 1 to bitmap.Height-2 do
  begin
    piexl := bitmap.Canvas.Pixels[x,y];
    RGBz := getrvalue(piexl);
    if (RGBz = 0) then
    begin
      nearDots := 0;  //判断周围8个点RGB是否相等
      if (getrvalue(bitmap.Canvas.Pixels[x - 1, y - 1]) = RGBz) then nearDots:=nearDots+1 ;
      if (getrvalue(bitmap.Canvas.Pixels[x, y - 1]) = RGBz) then nearDots:=nearDots+1 ;
      if (getrvalue(bitmap.Canvas.Pixels[x + 1, y - 1]) = RGBz) then nearDots:=nearDots+1 ;
      if (getrvalue(bitmap.Canvas.Pixels[x - 1, y]) = RGBz) then nearDots:=nearDots+1 ;
      if (getrvalue(bitmap.Canvas.Pixels[x + 1, y]) = RGBz) then nearDots:=nearDots+1 ;
      if (getrvalue(bitmap.Canvas.Pixels[x - 1, y + 1]) = RGBz) then nearDots:=nearDots+1 ;
      if (getrvalue(bitmap.Canvas.Pixels[x, y + 1]) = RGBz) then nearDots:=nearDots+1 ;
      if (getrvalue(bitmap.Canvas.Pixels[x + 1, y + 1] )= RGBz) then nearDots:=nearDots+1 ;
      if (nearDots < N) then  bitmap.Canvas.Pixels[x,y]:=rgb(255, 255, 255)
    end
    else
      bitmap.Canvas.Pixels[x,y]:=rgb(255, 255, 255);
  end;
end;

Tags:图片 问题 
作者:网络 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类推荐
  • 没有
本类固顶
  • 没有
  • 盒子文章(www.2ccc.com) © 2024 版权所有 All Rights Reserved.
  • 沪ICP备05001939号