2013-03-06 302 views
0

所以我是图像处理新手,我现在有点学习emgucv .. ..我想跟踪一个特定颜色的球 - 橙..但是.. 所以..我需要的是阈值,孤立,或二进制化(我不知道正确的术语)..图像保留白色和黑色的灰色图像。白色是橙色,黑色是非橙色..(对不起,如果这听起来有点愚蠢)..但是,当二进制化图像...阴影......橙子的阴影时有很多考虑因素......高效的快速颜色提取Emgucv

我很困惑,什么是使用我已经试过了图像的INRANGE功能的最佳功能.. ..

imgProcessed = imgOriginal.InRange(mincolor,maxcolor);

不管怎样,..我觉得它很慢..我不能真正二进制化所有的球..(从深橙色到浅橙色)..再加上我每次调整值光条件变化..是有没有什么办法可以让橙色的“全部”或至少“最”色调?对不起...新手这里...我会很感激任何帮助..代码是没有必要的..谢谢!:D

有这么多的功能使用.. HSV .. inrange .. cvthreshold ..什么是最好的办法?会使用hsv而不是bgr会更快吗?

回答

1

我已经这样做了。我放弃了OpenCV的功能,并亲自完成了数学计算。这里是我的代码:

 for (i = 0; i < rows; i = i + step) 
       { 
        for (j = 0; j < cols; j = j + step) 
        { 

         closestprimary = new Bgr(0, 0, 0); 
         currentcolor = ImageFrame[i, j]; 
         B = (int)currentcolor.Blue; 
         G = (int)currentcolor.Green; 
         R = (int)currentcolor.Red; 
         //hue = atan2(sqr(3) * (G - B), 2 * R - G - B) 
         hue = ((Math.Atan2(1.732050808 * (double)(G - B), (double)(2 * R - G - B)) * 57.295779513) + 360) % 360; ; 
         //find closest primary hue (60 degree) 
         if (hue >= 15 && hue < 50) { 
          closestprimary = new Bgr(0, 127, 255); } //orange - sorta had to eyeball this one /shrug 
         ImageFrame[i, j] = closestprimary;//set new color 
        } 
       } 

希望你能看到橙色色调如何在15和50之间,并且可以改变号码,无论你想要得到你所希望的任何颜色。

http://johndyer.name/lab/colorpicker/ 帮助我决定色调。 (看看顶部的数字,由'H')