zoukankan      html  css  js  c++  java
  • OpenCV学习(27) 直方图(4)

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

    imageimage

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

    image

    注意下面去掉低饱和度像素的方法(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

  • 相关阅读:
    Node.js连接MySQL数据库及构造JSON的正确姿势
    Lyx输入中文与代码高亮
    查看文件编码 + 查看文件扩展名 + 文件编码转换
    系统重装/装Anaconda后,Windows开始菜单缺少快捷方式解决方案
    Python动态网页爬虫-----动态网页真实地址破解原理
    多线程爬虫
    openpyxl基本操作
    BitMap原理
    Trie(前缀树/字典树)及其应用
    tensorflow和pytorch教程
  • 原文地址:https://www.cnblogs.com/mikewolf2002/p/3416342.html
Copyright © 2011-2022 走看看