这是我的第一篇文章,如果我错过了什么,请原谅我 .
我一直在使用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);
}
我希望这有帮助 .