这是我的第一篇文章,如果我错过了什么,请原谅我。
我一直在使用Visual Studio C ++来使用OpenCV2。我有一个基本的对象跟踪器工作。通过应用高斯模糊,转换为HSV,使用轨迹栏进行阈值处理,然后进行扩展,然后进行扩展。现在我想设置一些方法,可以在不使用Trackbars的情况下轻松校准要阈值化的颜色。 我已经尝试建立一个感兴趣的区域并采用平均BGR或HSV值(我已尝试过两种方式)。然后,如果需要使用轨道栏进行更精细的调整,但它似乎不起作用。我是在正确的轨道上,还是有更好的方法?
我基本上按照这个视频来了解我的位置。 https://www.youtube.com/watch?v=bSeFrPrqZ2A
我不是在寻找复制和粘贴的代码。我只是在寻找一种算法或解释方法。干杯
修改
抱歉,我会尝试清除它。我所做的是为家庭机器人视觉项目编写了一个物体跟踪程序。我只想更容易地校准要设置阈值的颜色。目前我使用轨迹栏设置阈值的最小和最大HSV值。然后使用Erode和Dilate清除二进制图像。在使用cv :: findConturs和cv :: moments找到最大轮廓的质心之前。 我试过的是在屏幕中央设置一个40x40像素的小方块。例如,当我在这个方块中拿着一个绿球并击中空格键时。我循环遍历正方形中的每个像素,并获得每个单独的Hue,Saturation和Value um ...值。然后采用每种模式并使用它来设置最小和最大阈值。
以下是代码的一部分
if(cv :: waitKey(20)== 32){//等待空格键
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);
}
我希望这会有所帮助。