博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV学习(27) 直方图(4)
阅读量:6824 次
发布时间:2019-06-26

本文共 937 字,大约阅读时间需要 3 分钟。

      我们可以利用OpenCV的直方图,backproject直方图和meanshift算法来跟踪物体。下面通过简单的例子来说明如何实现跟踪算法,我们有两幅狒狒的图片,如下图所示:我们首先在左图中框选狒狒的脸,计算出框选区域的色度(HSV空间的H)直方图,然后在image2中,backproject该直方图,得到每个像素点属于该直方图的概率图。

 

      得到的概率图之后,我们去掉图中低饱和度的像素,然后二值化,最后对该图使用meanshift算法,得到密度最大的区域,这个区域就是我们跟踪的目标区域。

注意下面去掉低饱和度像素的方法(HSV空间中的S分量表示饱和度):

cv::cvtColor(image, hsv, CV_BGR2HSV);

// 按通道分成3副图像
cv::split(hsv,v);
// 标示低饱和度的像素
cv::threshold(v[1],v[1],minSat,255,cv::THRESH_BINARY);

// 得到色度back-projection

result= finder.find(hsv,0.0f,180.0f,ch,1);

// 减少低饱和度像素
cv::bitwise_and(result,v[1],result);

 

     meanshift算法的代码如下,TermCriteria为迭代中值条件,最大迭代次数10,迭代精度0.01,只有这两个条件都满足的时候,迭代才会结束。迭代结束后,rect中存储的就是目标区域的位置。

    cv::Rect rect(110,260,35,40);

    cv::rectangle(image, rect, cv::Scalar(0,0,255));
    cv::TermCriteria criteria(cv::TermCriteria::MAX_ITER,10,0.01);
    cv::meanShift(result,rect,criteria);
    cv::rectangle(image, rect, cv::Scalar(255,0,0));

 

程序代码:工程FirstOpenCV22

转载于:https://www.cnblogs.com/mikewolf2002/p/3416342.html

你可能感兴趣的文章
博客模板
查看>>
iOS开发之都兴忱小结
查看>>
TableLayout(表格布局)
查看>>
PAT1007
查看>>
hdu 5755(高斯消元——模线性方程组模板)
查看>>
2016阿里安全峰会重点资料下载
查看>>
B窗体继承于A窗体,B启动:问题点
查看>>
解决input 有多少个radio绑定change事件,手动触发就会执行多少次问题
查看>>
SQL 时间格式转换
查看>>
针对DDR2-800和DDR3的PCB信号完整性设计
查看>>
RouteOS软路由HotSpot热点认证网关
查看>>
jenkins添加git源码目录时报Error performing command错误
查看>>
delphi多语言
查看>>
[Z] SQL SERVER 的前世今生--各版本功能对比
查看>>
df -h显示磁盘使用情况
查看>>
北京木瓜移动科技有限公司
查看>>
redis运维的一些知识点
查看>>
ZZZZ
查看>>
Win7或Windows server 2008中IIS7支持ASP+Access解决方法
查看>>
intent 图片调用问题
查看>>