OpenCV实现目标跟踪的例子camshiftdemo

该例子 使用CAMSHIFT(Continuously Adaptive Mean Shift)算法跟新目标跟踪窗口,适合用于人脸的跟踪。实际使用时,用鼠标圈中要跟踪的目标,但相机的画面移动时,可以很好地实现对目标的跟踪,但当被跟踪的目标离开相机的画面时,会出现程序崩溃的现象,如下图:

OpenCV实现目标跟踪的例子camshiftdemo_第1张图片

经过一番追查,发现问题出在trackWindow上,但CamShift函数的每次调用是会判断和修改trackWindow的大小的,如果这个大小非正,就会引发CV_Assert断言,导致程序崩溃。该函数返回的trackBox用于绘制椭圆也是要求大小为正。

这种情况是目标跟丢了,具体解决办法可以在CamShift函数调用之后加上以下代码:

if (trackWindow.width <= 0 || trackWindow.height <= 0)
{
cout << "error tracking: object is lost.\n";
trackObject = 0;
histimg = Scalar::all(0);
continue;
}
使其结束跟踪,这时用户可以用鼠标重新圈中要跟踪的目标。


你可能感兴趣的:(算法及人工智能,代码/脚本/命令行/可执行文件)