所以我是图像处理新手,我现在正在学习emgucv .. ..我想跟踪一个特定颜色的球 - 橙色..但.. 所以...我需要的是阈值,隔离或二值化(我不知道正确的术语)..图像保留白色和黑色的灰色图像。白色是橙色,黑色是非橙色..(对不起,如果这听起来有点愚蠢)..但是在对图像进行二值化时有很多考虑因素......阴影......橙色的阴影......
我很困惑什么是最好的功能.. 我已经为Image ..尝试了inRange函数。
imgProcessed = imgOriginal.InRange(mincolor,maxcolor);
怎么样,..我发现它很慢..而且我不能真正将所有的球都二进制化..(从深橙色到浅橙色)..加上每次光线条件变化我都要调整值..是否有任何方式获得“全部”或至少“最”的橙色色调?对不起..新手在这里...我很感激任何帮助..代码没有必要..谢谢!:D
有很多功能可供使用.. HSV .. inrange .. cvthreshold ..什么是最好的等待?将使用hsv而不是bgr更快?
答案 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')