zoukankan      html  css  js  c++  java
  • delphi实现图象灰度处理的3种方法

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

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

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

    [delphi] view plain copy
     
     print?
    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:=to image1.Width+do  
    12.  begin  
    13.   for j:=to image1.Height+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
    平均值法会形成较柔和的灰度图象。

    [delphi] view plain copy
     
     print?
    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:=to image1.Width+do  
    13.  begin  
    14.   for j:=to image1.Height+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,可以得到最合理的灰度图象

    [delphi] view plain copy
     
     print?
      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:=to image1.Width+do  
      12.  begin  
      13.    for j:=to image1.Height+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

  • 相关阅读:
    简单的C语言编译器--语法分析器
    简单的C语言编译器--词法分析器
    简单的C语言编译器--概述
    最短路径算法
    拓扑排序和关键路径
    图的连通性
    最小生成树
    图的搜索
    gcc O2优化选项对内嵌汇编以及函数递归调用的影响
    gcc 在c代码中内嵌汇编调用c函数: 只是证明曾经我来过
  • 原文地址:https://www.cnblogs.com/findumars/p/5400233.html
Copyright © 2011-2022 走看看