试了一下基于彩色直方图反向投影的Camshitft追踪
参考文章:
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/back_projection/back_projection.html
http://www.cnblogs.com/zsb517/archive/2012/06/20/2556508.html
先说一下直方图的生成过程:
1. 先将frame转换到hsv空间
2. 对frame进行mask处理
1> mask的选择有三个参数:vmin, vmax smin(亮度最小值,亮度最大值,饱和度最小值),其实不太理解为什么要进行一个mask处理,是因为要追踪的目标总是色彩明艳的吗?
3. 将转换到hsv空间的图像的h通道抽离出来,生成只有hue(色调)通道的hue图
4. 用鼠标框选出要追踪的目标,保存hue图像的对应ROI区域和mask的对应ROI图像
5. 生成hueROI(使用maskROI做掩膜)的彩色直方图
6. 使用CamShift函数来计算生成的RotatedRect进行追踪
生成彩色直方图颜色的ColBuf,HSV空间的hue通道范围为0~360,在人为生成的时候规定为0~180。
float hranges[] = { 0, 180 };
const float* phranges = hranges;
//直方图参数:参数1:输入图像的地址 参数2:输入图像个数 参数3:统计的通道数(?) 参数4:掩膜 参数5:输出的直方图,一个Mat 参数6:直方图的维度 参数7:存放每个直方图的数组 参数8:每一维的取值范围
calcHist(&hueRoi, 1, 0, maskRoi, hist, 1, &hsize, &phranges);
normalize(hist, hist, 0, 255, CV_MINMAX);
trackWindow = selectionArea;