使用Meanshift算法查找物体
2016-04-13 14:53
435 查看
看了很长时间的Meanshift,今天终于会用了。
借助于一本参考书《OpenCV2计算机视觉编程手册》,这本书帮了很大的忙。
借助于一本参考书《OpenCV2计算机视觉编程手册》,这本书帮了很大的忙。
#include <iostream> #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat srcImg1 = imread("1.jpg"); Mat srcImg2 = imread("2.jpg"); Mat srcHSV1, srcHSV2; cvtColor(srcImg1, srcHSV1, COLOR_RGB2HSV); cvtColor(srcImg2, srcHSV2, COLOR_RGB2HSV); Rect rect(130, 120, 55, 55); Mat imgROI = srcHSV1(rect); rectangle(srcImg1, rect, Scalar(0, 0, 255)); rectangle(srcImg2, rect, Scalar(0, 0, 255)); imshow("srcImg1", srcImg1); imwrite("srcImg1.png", srcImg1); int histSize[1] = {256}; float hranges[2] = {0, 255}; const float* ranges[1] = {hranges}; int channels[1] = {0}; Mat dstHist; calcHist(&imgROI, 1, channels, Mat(), dstHist, 1, histSize, ranges); normalize(dstHist, dstHist, 0.0, 1.0, NORM_MINMAX); Mat backprojection; calcBackProject(&srcHSV2, 1, channels, dstHist, backprojection, ranges, 255.0); imshow("backprojection", backprojection); imwrite("backproj.png", backprojection); TermCriteria criteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 10, 0.01); meanShift(backprojection, rect, criteria);//Meanshift会自动更新这个rect rectangle(srcImg2, rect, Scalar(0, 255, 0)); imshow("srcImg2", srcImg2); imwrite("srcImg2.png", srcImg2); waitKey(0); return 0; }
相关文章推荐
- Android 从内核源码关掉Android SELinux
- hdu4411(费用流)
- 书籍下载
- spark ha讲解与配置
- android:string文件中的空格 
- java线程池
- 开源大数据利器汇总
- SQLite基本函数介绍
- C语言各种数据类型取值范围
- RGB与YCbCr颜色空间的转换
- 内存堆和栈的区别
- 使用nginx后如何在web应用中获取用户ip及原理解释GOOD
- 依赖注入和控制反转
- 正则表达式用法总结
- 开源的jdbc
- 常见几个linux基本语法命令
- iOS 常见错误以及错误分析解决
- 【HDU 2084】数塔(dp)
- HibernateTemplate的一些常用方法总结
- Android 资源分类详解