怎样给一幅黑白的BMP图像加上伪彩(彩色)?

解决方案 »

  1.   

    使用photoshop,在网上搜索一下,一大堆。
      

  2.   

    呵呵,这不是无中生有,编程是可以实现的。采用的是伪彩色增强算法
    它把离散的黑白图像F(j,k)的不同灰度级按照线性或者非线性映射成不同彩色。可以提高图像内容的可辨识度。
    最简单的伪彩色图像增强技术是强度分层,它也是操作最简便的。
    算法如下
    1。把F(j,k)看成是一个二维强度函数,用m个平行水平面的切割平面作切割,会得到m个不同的灰度区间L1,L2...Lm。可以是均匀分层过程。当然你也可以做非等间隔分层,把你关心的灰度级区间分的密一些,其他区间分的稀疏一些。层次越多细节越丰富彩色越柔和。2。把图像灰度F(j,k)同时送入具有不同特性的红绿蓝三个变换器。产生由变换函数调制的三基色分量R(j,k),G(j,k),B(j,k),这三个分量就能确定F(j,k)的颜色。
    也就是不同灰度级对应着不同的R,G,B分量。根据灰度级所在的区间确定它的颜色
      

  3.   

    var
    RedValue, GreenValue, BlueValue: integer;///要变换颜色的rgb的值
    p0:pbytearray;
    Gray,r,g,b,x,y,GrayMax: Integer;
    begin
     RedValue := getrvalue(cweicai.SelectionColor);
     GreenValue :=getgvalue(cweicai.SelectionColor);
     BlueValue := getbvalue(cweicai.SelectionColor);//得到要变换的rgb值
     graymax:=0;
     for y:=0 to imgpic.Picture.Bitmap.Height-1 do
     begin
       p0:=imgpic.Picture.Bitmap.scanline[y];
       for x:=0 to imgpic.Picture.Bitmap.Width-1 do
         begin
           Gray:=Round(p0[x*3]*0.3+p0[x*3+1]*0.59+p0[x*3+2]*0.11);
           if GrayMax<gray then graymax:=gray;
         end;
     end;////////////////////////////这里graymax得到图象上最大灰度的点灰度 for y:=0 to imgpic.Picture.Bitmap.Height-1 do
     begin
       p0:=imgpic.Picture.Bitmap.scanline[y];
       for x:=0 to imgpic.Picture.Bitmap.Width-1 do
       begin
         Gray:=Round(p0[x*3+2]*0.3+p0[x*3+1]*0.59+p0[x*3]*0.11); 
         p0[x*3]:=round(RedValue*Gray/GrayMax);    /////////
         p0[x*3+1]:=round(GreenValue*Gray/GrayMax);//具体算法
         p0[x*3+2]:=round(BlueValue*Gray/GrayMax);//////
       end;
     end;////////////这段给图象上假彩色
     imgpic.Repaint;