delphi实现图象灰度处理的3种方法

灰度处理的方法主要有如下3种:

1、最大值法:使R、G、B的值等于3值中最大的一个,即:
   R=G=B=max(R,G,B)

最大值法会使形成高亮度很高的灰度图象

  1. var
  2. bitmap:tbitmap;
  3. i,j:integer;
  4. a,b,c,crgb,temp:longint;
  5. res:byte;
  6. begin
  7. //最大值灰度处理方法
  8. bitmap:=tbitmap.Create;
  9. bitmap.Width:=image1.Width+1;
  10. bitmap.Height:=image1.Height+1;
  11. for i:=0 to image1.Width+1 do
  12. begin
  13. for j:=0 to image1.Height+1 do
  14. begin
  15. crgb:=colortorgb(image1.Canvas.Pixels[i,j]);
  16. a:=crgb;
  17. b:=crgb shr 8;
  18. c:=crgb shr 8;
  19. //求出3者之间的最大值
  20. if a>b then
  21. temp:=a
  22. else temp:=b;
  23. if c>temp then
  24. temp:=c ;
  25. res:=byte(temp);
  26. bitmap.Canvas.Pixels[i,j]:=rgb(res,res,res);
  27. end;
  28. end;
  29. image1.Canvas.Draw(0,0,bitmap);
  30. bitmap.Free;
  31. end;

2、平均值方法:使R、G、B的值求出平均值,即:
R=G=B=(R+G+B)3
平均值法会形成较柔和的灰度图象。

  1. var
  2. bitmap:tbitmap;
  3. i,j:integer;
  4. crgb:longint;
  5. rr,gg,bb:byte;
  6. res:byte;
  7. begin
  8. //图象的平均值处理
  9. bitmap:=tbitmap.Create;
  10. bitmap.Width:=image1.Width;
  11. bitmap.Height:=image1.Height;
  12. for i:=0 to image1.Width+1 do
  13. begin
  14. for j:=0 to image1.Height+1 do
  15. begin
  16. crgb:=colortorgb(image1.Canvas.Pixels[i,j]);
  17. rr:=byte(crgb);
  18. gg:=byte(crgb shr 8);
  19. bb:=byte(crgb shr 8);
  20. res:=(rr+gg+bb)div 3;
  21. bitmap.Canvas.Pixels[i,j]:=rgb(res,res,res);
  22. end;
  23. end;
  24. image1.Canvas.Draw(0,0,bitmap);
  25. bitmap.Free;
  26. end;

3、加权平均值法:根据重要性或其他指标给R、G、B赋予不同的权值,并使R、G、B它们的值加权平均,即:
R=G=B=(WrR+WrG+WbB)3,经实际经验和理论推导证明,采用R=G=B=0.30*R+0.59*G+0.11*B,可以得到最合理的灰度图象

    1. var
    2. bitmap:tbitmap;
    3. i,j:integer;
    4. rr,gg,bb,res:byte;
    5. crgb:longint;
    6. begin
    7. //加权平均处理方法
    8. bitmap:=tbitmap.Create;
    9. bitmap.Width:=image1.Width+1;
    10. bitmap.Height:=image1.Height+1;
    11. for i:=0 to image1.Width+1 do
    12. begin
    13. for j:=0 to image1.Height+1 do
    14. begin
    15. crgb:=colortorgb(image1.Canvas.Pixels[i,j]);
    16. rr:=byte(crgb);
    17. gg:=byte(crgb shr 8);
    18. bb:=byte(crgb shr 8);
    19. res:=(30*rr+59*gg+11*bb)div 100;
    20. bitmap.Canvas.Pixels[i,j]:=rgb(res,res,res);
    21. end;
    22. end;
    23. image1.Canvas.Draw(0,0,bitmap);
    24. bitmap.Free;
    25. end;

http://blog.csdn.net/aroc_lo/article/details/9256077

上一篇:ios -将navigationbar的translucent属性设为No后,子控制器视图整体下移问题


下一篇:配置firewalld端口转发