OpenCV4学习笔记(37)——CAMShift(Continuously Adaptive MeanShift)算法

在上次的笔记《OpenCV4学习笔记(36)——基于均值迁移(MeanShift)算法和直方图反向投影的目标移动跟踪》中,整理记录了一种针对目标的移动跟踪算法,主要是基于均值迁移和直方图反向投影来实现的。而今天要记录的笔记内容,依然是一种针对目标的移动跟踪算法——CAMShift目标移动跟踪算法,这种算法是基于MeanShift目标移动跟踪算法的改进。

CAMShift算法其实就是连续自适应的MeanShift算法,是对MeanShift 算法的改进,它能够自动调节搜索窗口大小来适应目标的大小,可以跟踪视频中尺寸变化的目标。

CAMShift算法相比起MeanShift算法主要具有两个改进方向:
一是CAMShift算法会根据跟踪对象的大小变化来自动调整搜索窗口大小;
二是返回的检测目标信息更加完整,不仅包含位置信息,同时还包含了角度信息,也即返回的是目标所在的最小外接旋转矩形。

在OpenCV中提供了CamShift()这个API来实现CAMShift算法,它的返回值为一个包含位置和角度的旋转矩形,其参数列表如下:

第一个参数probImage:输入的概率分布图像,也就是反向投影图像;

第二个参数window:目标位置的初始窗口;

第三个参数criteria:迁移终止条件,TermCriteria::EPS为迁移距离小于阈值时停止迁移,TermCriteria::COUNT为迁移迭代次数达到设定的最大值时停止迁移,可以两者同时使用。

下面看一下具体的代码演示:

	VideoCapture capture;
	capture.open("D:\\opencv_c++\\opencv_tutorial\\data\\images\\balltest.mp4");
	//capture.open(0);
	if (!capture.isOpened())
	{
   
		return 0;
	}
	//提取第一帧图像中ROI区域并将其转化为HSV图像
	Mat first_image, first_hsv, roi_image, roi_hsv;
	capture.read(first_image);
	Rect roi_rect = selectROI("first_image", first_image, false, false);
	roi_image = first_image(roi_rect).clone();
	cvtColor(roi_image, roi_hsv, COLOR_BGR2HSV);
	//计算ROI图像的直方图
	Mat roi_hist;
	int dims = 2;
	int channels[2] = {
    0,1 };
	int histSize[2] = {
    180,255 };
	float ranges_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值