当前位置: 首页 > news >正文

Opencv中的直方图(1)计算反向投影直方图函数calcBackProject()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

计算直方图的反向投影。

cv::calcBackProject 函数计算直方图的反向投影。也就是说,类似于 calcHist,在每个位置 (x, y),该函数收集输入图像中选定通道的值,并找到对应的直方图区间。但是,与其递增该区间值,该函数读取区间值,将其乘以 scale,并存储在 backProject(x, y) 中。从统计学的角度来看,该函数计算每个元素值相对于由直方图表示的经验概率分布的概率。例如,你可以如何找到并跟踪场景中的一个亮色物体:

在跟踪之前,让物体占据几乎整个画面,展示给摄像头。计算色调直方图。直方图可能会有强烈的峰值,对应于物体中的主导颜色。
在跟踪时,使用预先计算的直方图计算每个输入视频帧的色调平面的反向投影。对反向投影进行阈值处理以抑制弱颜色。可能还有意义的是抑制颜色饱和度不足、太暗或太亮的像素。
在结果图像中找到连通组件,并选择例如最大的组件。
这是 CamShift 颜色物体跟踪器的大致算法。

参数

  • 参数images 源数组。它们都应该具有相同的深度(CV_8U, CV_16U 或 CV_32F),并且具有相同的尺寸。每一个都可以有任意数量的通道。
  • 参数nimages 源图像的数量。
  • 参数channels用于计算反向投影的通道列表。通道的数量必须与直方图的维度相匹配。第一个数组的通道编号从 0 到 images[0].channels()-1,第二个数组的通道编号从 images[0].channels() 到 images[0].channels() + images[1].channels()-1,以此类推。
  • 参数hist 输入的直方图,它可以是密集的也可以是稀疏的。
  • 参数backProject 目标反向投影数组,它是一个单通道数组,具有与 images[0] 相同的尺寸和深度。
  • 参数ranges 每个维度的直方图区间边界的数组。参见 calcHist。
  • 参数scale 反向投影输出的可选比例因子。
  • 参数uniform 标志位,指示直方图是否是均匀的(参见上述说明)。

代码示例


#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{Mat src, hsvImg, hist;vector< Mat > hsv;int histSize = 5;src = imread( "/media/dingxin/data/study/OpenCV/sources/images/qiu.jpg" );imshow( "src", src );//转换为 HSV 通道图像cvtColor( src, hsvImg, COLOR_BGR2HSV );imshow( "hsvImg", hsvImg );//通道分离split( hsvImg, hsv );imshow( "hImg", hsv[ 0 ] );int channels[]        = { 0 };float hr[]            = { 0, 180 };const float* ranges[] = { hr };calcHist( &hsv[ 0 ], 1, &channels[ 0 ], Mat(), hist, 1, &histSize, &ranges[ 0 ] );normalize( hist, hist, 255, 0, NORM_L1 );imshow( "hist", hist );//计算反向投影Mat backImg;calcBackProject( &src, 1, &channels[ 0 ], hist, backImg, &ranges[ 0 ], 1 );imshow( "backImg", backImg );waitKey( 0 );
}

运行结果

在这里插入图片描述

相关文章:

  • 洛谷8.30
  • 盲盒小程序开发,探索市场发展优势
  • 基于 OpenCV 的数字图像处理实验平台设计
  • 自己开发完整项目一、登录功能-05(动态权限控制)
  • 创建型设计模式-原型模式(prototype)- python实现
  • 微软AD替代方案统一管理Windows和信创电脑的登录认证与网络准入认证
  • ARM体系与架构
  • C++AVL树
  • 后端输出二进制数据,前端fetch接受二进制数据,并转化为字符输出
  • 智能体进化发展了一年,现在的RPA Agent迭代到什么程度了?
  • 【初出江湖】SOA 与微服务:哪个最适合您的业务?
  • 计算机网络-BFD实验配置
  • 测试:TestGRPCDiscovery
  • docker实战基础二(Docker基础命令)
  • zset使用lua实现取最高分数中的随机成员
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Next.js之基础概念(二)
  • orm2 中文文档 3.1 模型属性
  • Redis 懒删除(lazy free)简史
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vuex 笔记整理
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 阿里研究院入选中国企业智库系统影响力榜
  • 阿里云应用高可用服务公测发布
  • 从setTimeout-setInterval看JS线程
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 七牛云假注销小指南
  • 前端之React实战:创建跨平台的项目架构
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 新手搭建网站的主要流程
  • 优化 Vue 项目编译文件大小
  • 7行Python代码的人脸识别
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # .NET Framework中使用命名管道进行进程间通信
  • ###C语言程序设计-----C语言学习(3)#
  • ###STL(标准模板库)
  • #FPGA(基础知识)
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (函数)颠倒字符串顺序(C语言)
  • (理论篇)httpmoudle和httphandler一览
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (强烈推荐)移动端音视频从零到上手(下)
  • (一)UDP基本编程步骤
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)3D模板阴影原理
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • ::什么意思