小弟遇到了一点困难,要想从一幅图象中把能用肉眼感觉到的红色提取出来,可是不知道怎么提取,听说有个数理统计的公式的(关于R,G,B值的)但是不知道,有哪位高手知道,请赐教,小弟先谢过。

解决方案 »

  1.   

    function getRed(const Color:TColor);byte;
    begin
     Result:=(ColorToRGB(color) and $FF)
    end;
    function getGreen(const Color:TColor);byte;
    begin
     Result:=Trunc((ColorToRGB(color) and $FF00)/$100)
    end;
    function getBlue(const Color:TColor);byte;
    begin
     Result:=Trunc((ColorToRGB(color) and $FF0000)/$10000)
    end;
      

  2.   

    楼主的问题好象很难啊,R,G,B 3个值怎样搭配才能让人的视觉认为是红色??
    好象不大可能做道这点,而楼主的意思是不仅能区分红色,还能区别大红还是暗红?
    难。难。难。
      

  3.   

    呵呵,楼上的,其实也不是很难,但是我手上只有提取红色的资料,2*red-green-blue-60>0,我试验了一遍,效果还可以,我想知道有没有什么更有效的方法,还有其他颜色的公式我还没有,看是否有哪位高手赐教!
      

  4.   

    to 楼主:
       你怎么实验的 ?弄个for的3个嵌套循环,一个一个试?每个值在人眼看出来都是红色的吗?如果不是。公式就不能成立。
      

  5.   

    我倒……哪能这样来啊?首先应该将RGB色系转换到HSB或者HLS色系,然后再作判别。HSB色系是典型的主观色系,对颜色判别非常有用,其中H为色调,S为饱和度,B为照度(注意不是亮度)。例如红色应该是H在0度附近(H的范围是0到360度),比如-15度到+15度,S超过%40,深红的B在%20到%60,鲜红的B超过%60。RGB到HSB色系的转换方法自己到网上搜索一下,满世界都是。
      

  6.   

    to  weibz0525(小虫)
    当然不是试出来的,是数理统计的规律,但我只知道红色的,呵呵!