这是我的第一篇文章,如果我错过了什么,请原谅我 .

我一直在使用Visual Studio C玩OpenCV2 . 我有一个基本的对象跟踪器工作 . 通过应用高斯模糊,转换为HSV,使用轨迹进行阈值处理,然后进行扩展 . 现在我想设置一些方法,可以在不使用Trackbars的情况下轻松校准要阈值化的颜色 . 我已经尝试 Build 一个感兴趣的区域并取平均BGR或HSV值(我已尝试过两种方式) . 然后,如果需要使用轨道栏进行更精细的调整,但它似乎不起作用 . 我是在正确的轨道上,还是有更好的方法?

我已经基本上按照这个视频来了解我的位置 . https://www.youtube.com/watch?v=bSeFrPrqZ2A

我不是在寻找复制和粘贴的代码 . 我只是在寻找算法或解释方法 . 干杯

EDIT


对不起,我会尝试清除它 . 我所做的是为家庭机器人视觉项目编写了一个物体跟踪程序 . 我只想更容易地校准要设置阈值的颜色 . 目前我使用轨迹栏设置阈值的最小和最大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);

}

我希望这有帮助 .