首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效快速颜色提取Emgucv

高效快速颜色提取Emgucv
EN

Stack Overflow用户
提问于 2013-03-07 02:57:06
回答 1查看 778关注 0票数 0

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

我搞不懂什么是最好的函数。我已经尝试过图像的inRange函数。

imgProcessed =imgOriginal.InRange(最小颜色,最大颜色);

然而,..我发现它是slow..and的,我真的不能把所有的球都二值化。(从深橙色到浅橙色)..另外,每次光线条件改变时,我都要调整这些值。有没有办法获得“全部”或至少“大部分”的橙色色调?Sorry..newbie在这里...我很感激任何help..code不是necessary..thanks!:D

有这么多函数可以使用..HSV..inrange..cvthreshold..what是最好的waY吗?使用hsv而不是bgr会更快吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-13 06:03:46

我已经这样做了。我放弃了OpenCV函数,手工完成了数学运算。下面是我的代码:

代码语言:javascript
复制
       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”表示)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15255680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档