ofxCv icon indicating copy to clipboard operation
ofxCv copied to clipboard

HSV Tracker doesn't wrap correctly

Open kylemcdonald opened this issue 11 years ago • 0 comments

this means reddish colors may not be tracked correctly. the fix would look something like this:

float minS = clamp(sTarget-20, 0, 255);
float maxS = clamp(sTarget+20, 0, 255);
float minV = 0;
float maxV = 255;
cv::Scalar minRange = cv::Scalar(hTarget - hWidth, minS, minV);
cv::Scalar maxRange = cv::Scalar(hTarget + hWidth, maxS, maxV);
if(minRange[0] < 0)
{
   //negative side
   cv::inRange(hsvImg, cv::Scalar(180+minRange[0], minS, minV) , cv::Scalar(180, maxS, maxV), minMap);
   //positive side
   cv::inRange(hsvImg, cv::Scalar(0, minS, minV), maxRange, maxMap);
   cv::bitwise_or(minMap,maxMap, threshedMap);
   //NSLog(@"less than");
}
else if(maxRange[0] > 180)
{
   //neg side
   cv::inRange(hsvImg, minRange, cv::Scalar(180, maxS, maxV), minMap);
   //pos side
   cv::inRange(hsvImg, cv::Scalar(0, minS, minV), cv::Scalar(180 - maxRange[0], maxS, maxV), maxMap);
   cv::bitwise_or(minMap,maxMap, threshedMap);
   //NSLog(@"more than");
}
else
{
   cv::inRange(hsvImg, minRange, maxRange, threshedMap);
   //NSLog(@"in range.");
}

kylemcdonald avatar Nov 22 '12 21:11 kylemcdonald