0

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

我对最好使用的功能感到困惑..我已经尝试了 Image 的 inRange 功能..

imgProcessed = imgOriginal.InRange(mincolor,maxcolor);

但是,..我发现它很慢..我不能真正将所有球二值化..(从深橙色到浅橙色)..另外,每次光照条件发生变化时我都必须调整值..有什么方法可以获得“全部”或至少“大多数”橙色?对不起..新手在这里...我会很感激任何帮助..代码不是必需的..谢谢!:D

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

4

1 回答 1

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”)

于 2014-01-12T22:03:46.450 回答