高效快速颜色提取Emgucv

时间:2013-03-06 18:57:06

标签: performance colors tracking emgucv hsv

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

我很困惑什么是最好的功能.. 我已经为Image ..尝试了inRange函数。

imgProcessed = imgOriginal.InRange(mincolor,maxcolor);

怎么样,..我发现它很慢..而且我不能真正将所有的球都二进制化..(从深橙色到浅橙色)..加上每次光线条件变化我都要调整值..是否有任何方式获得“全部”或至少“最”的橙色色调?对不起..新手在这里...我很感激任何帮助..代码没有必要..谢谢!:D

有很多功能可供使用.. HSV .. inrange .. cvthreshold ..什么是最好的等待?将使用hsv而不是bgr更快?

1 个答案:

答案 0 :(得分: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')