Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1612873
  • 博文数量: 585
  • 博客积分: 14610
  • 博客等级: 上将
  • 技术积分: 7402
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-15 10:52
文章存档

2013年(5)

2012年(214)

2011年(56)

2010年(66)

2009年(44)

2008年(200)

分类: C/C++

2012-01-27 01:31:05

灰度图像和彩色图像互相转换
分类: 数字图像处理 213人阅读 评论(0) 收藏 举报

1.彩色图像到灰度图的转换公式

Gray(i,j)=0.11 * R(i,j) + 0.59 * G(i,j) + 0.3 * B(i,j)

 在OpenCV中采用的是下面公式

Gray = 0.212671 * R + 0.715160 * G + 0.072169 * B +0 *A

 

 

2.灰度到伪彩色的转换公式
  f表示某一像素点的灰度   
  if   0<=f<63   then   
  begin   
      r   :=0;   g   :=254-4*f;   b   :=255;   
  end;   
  if   64<=f<127   then   
  begin   
      r   :=0;   g   :=4*f-254;   b   :=510-4*f;   
  end;   
  if   128<=f<191   then   
  begin   
      r   :=4*f-510;   g   :=255;   b   :=0;   
  end;   
  if   192<=f<=255   then   
  begin   
      r   :=255;   g   :=1022-4*f;   b   :=0;   
  end;   
    
  //灰度图像转成伪彩色实例:   
  procedure   GrayToColor(Bmp:   TBitmap);   
  var   
      i,   j,   uG:   Integer;   
      P:   PByteArray;   
  begin   
      Bmp.PixelFormat   :=   pf24bit;   
      for   j   :=   0   to   Bmp.Height   -   1   do   
      begin   
          P   :=   Bmp.ScanLine[j];   
          for   i   :=   0   to   Bmp.Width   -   1   do   
          begin   
              uG   :=   P[3   *   i];   
              if   (0   <=   uG)   and   (uG   <   63)   then   //灰度------>伪彩色   
              begin   
                  P[3   *   i   +   2]   :=   0;   
                  P[3   *   i   +   1]   :=   254   -   4   *   uG;   
                  P[3   *   i]   :=   255;   
              end;   
              if   (64   <=   uG)   and   (uG   <   127)   then   
              begin   
                  P[3   *   i   +   2]   :=   0;   
                  P[3   *   i   +   1]   :=   4   *   uG   -   254;   
                  P[3   *   i]   :=   510   -   4   *   uG;   
              end;   
              if   (128   <=   uG)   and   (uG   <   191)   then   
              begin   
                  P[3   *   i   +   2]   :=   4   *   uG   -   510;   
                  P[3   *   i   +   1]   :=   255;   
                  P[3   *   i]   :=   0;   
              end;   
              if   (192   <=   uG)   and   (uG   <=   255)   then   
              begin   
                  P[3   *   i   +   2]   :=   255;   
                  P[3   *   i   +   1]   :=   1022   -   4   *   uG;   
                  P[3   *   i]   :=   0;   
              end;   
          end;   
      end;   
  end;  

阅读(1949) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~