Opencv 目标跟踪器的自动颜色校准
这是我的第一篇帖子,如果我错过了什么,请原谅 我一直在用VisualStudioC++来使用OpenCV2。我有一个基本的物体跟踪器。通过应用高斯模糊、转换为HSV、使用轨迹栏进行阈值化、腐蚀然后膨胀。现在,我想建立一种方法来轻松校准要设置阈值的颜色,而无需使用轨迹栏。 我试着设置一个感兴趣的区域,并采用我两种方法都尝试过的平均BGR或HSV值。然后,如果需要,使用轨迹栏进行更精细的调整,但它似乎不起作用。我是走对了路,还是有更好的办法 我基本上是跟着这段视频走的。 我不是在寻找一个代码复制和粘贴。我只是在寻找一种算法或一种方法的解释。干杯 编辑 对不起,我会试着把它弄清楚。我所做的是为一个家庭机器人视觉项目编写一个目标跟踪程序。我只是想让它更容易校准什么颜色是阈值。目前,我使用轨迹栏设置阈值的最小和最大HSV值。然后使用腐蚀和扩张来清除二值图像。在使用cv::findConturs和cv::moments查找最大轮廓的质心之前。 我尝试的是在屏幕中央设置一个40x40像素的小正方形。举个例子,当我在这个正方形里拿着一个绿色的球,按下空格键。我循环通过正方形中的每个像素,得到每个单独的色调、饱和度和值,嗯…值。然后采用每个的模式,并使用该模式设置最小和最大阈值 下面是一段代码 ifcv::waitKey20==32{//等待空格键Opencv 目标跟踪器的自动颜色校准,opencv,video-tracking,Opencv,Video Tracking,这是我的第一篇帖子,如果我错过了什么,请原谅 我一直在用VisualStudioC++来使用OpenCV2。我有一个基本的物体跟踪器。通过应用高斯模糊、转换为HSV、使用轨迹栏进行阈值化、腐蚀然后膨胀。现在,我想建立一种方法来轻松校准要设置阈值的颜色,而无需使用轨迹栏。 我试着设置一个感兴趣的区域,并采用我两种方法都尝试过的平均BGR或HSV值。然后,如果需要,使用轨迹栏进行更精细的调整,但它似乎不起作用。我是走对了路,还是有更好的办法 我基本上是跟着这段视频走的。 我不是在寻找一个代码复制和
int count = 0;
cv::Mat roi_Crop = frame_HSV(roi); //create cropped image from frame_HSV
for(int i=0; i<roi_Crop.rows; i++) // cycle through each pixel
{
for(int j=0; j<roi_Crop.cols; j++)
{
Hue[count] = roi_Crop.at<cv::Vec3b>(i,j)[0];
Sat[count] = roi_Crop.at<cv::Vec3b>(i,j)[1];
Val[count] = roi_Crop.at<cv::Vec3b>(i,j)[2];
count++;
}
}
HSV_Mode[0] = findMode(Hue);
HSV_Mode[1] = findMode(Sat);
HSV_Mode[2] = findMode(Val);
}
我希望这能有所帮助。问题似乎不太清楚。你能更清楚地问一下吗?你想在代码中保持颜色一致吗?对不起,你的解释对我来说很模糊!康斯坦丁:对不起,你说的“颜色一致性”是什么意思?我想要的是能够在屏幕上的特定区域中保持彩色对象。点击一个键,然后开始跟踪该颜色。我已经编辑了上面的原始查询。我希望这会把事情弄清楚。