OpenCV学习(27) 直方图(4)

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

      我们可以利用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

相关文章
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
OpenCV与AI深度学习之常用AI名词解释学习
AGI:Artificial General Intelligence (通用人工智能):是指具备与人类同等或超越人类的智能,能够表现出正常人类所具有的所有智能行为。又被称为强人工智能。
12 2
|
13天前
|
计算机视觉
OpenCV中的二维直方图
【6月更文挑战第12天】中的二维直方图。
10 1
|
6天前
|
算法 计算机视觉
【Qt&OpenCV 直方图计算 split/calcHist/normalize】
【Qt&OpenCV 直方图计算 split/calcHist/normalize】
10 0
|
18天前
|
机器学习/深度学习 开发框架 TensorFlow
### 如何系统化学习OpenCV4
### 如何系统化学习OpenCV4
11 0
|
1月前
|
计算机视觉 索引
【OpenCV】- 直方图反向投影
【OpenCV】- 直方图反向投影
|
1月前
|
计算机视觉 索引
【OpenCV】直方图计算 & 均衡化直方图
【OpenCV】直方图计算 & 均衡化直方图
|
1月前
|
算法 计算机视觉 Python
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
|
1月前
|
存储 计算机视觉
OpenCV—学习基本绘图
OpenCV—学习基本绘图
|
1月前
|
算法 计算机视觉
OpenCV直方图
OpenCV直方图
18 0
|
1月前
|
计算机视觉 索引
opencv直方图绘制详解
opencv直方图绘制详解