OpenCV calcHist()函数及其用法详解

        OpenCV calcHist()函数原型共有三个,如下:

        该函数计算一个或多个数组的直方图。用于递增直方图箱的元组的元素取自同一位置的相应输入数组。

函数参数:

       images  源(图像)数组。它们都应具有相同的深度、CV_8U、CV_16U 或 CV_32F 以及相同的大小。每个都可以有任意数量的通道。

       nimages 源图像数量

       channels 用于计算直方图的维度通道列表。第一个数组通道从 0 到 images[0].channels()-1 计数,第二个数组通道从 images[0].channels() 到 images[0].channels() + images[1] 计数。通道()-1,等等。

        mask 可选掩模。如果矩阵不为空,则它必须是与 images[i] 大小相同的 8 位数组。非零掩码元素标记直方图中计数的数组元素。

       hist  输出直方图,它是密集或稀疏的 dims 维数组。

       dims  直方图维数,必须为正且不大于 CV_MAX_DIMS(在当前 OpenCV 版本中等于 32)。

       histSize 每个维度的直方图数组大小

       ranges 每个维度中直方图 bin 边界的 dims 数组的数组。当直方图是均匀的 (uniform =true) 时,对于每个维度 i,足以指定第 0 个直方图 bin 的下限(包含)边界 L0 和上限(不包含)边界 UhistSize[i]−1最后一个直方图 bin histSize[i]-1 。也就是说,在均匀直方图的情况下,每个 range[i] 都是一个包含 2 个元素的数组。当直方图不均匀时(uniform=false),则每个range[i]包含histSize[i]+1个元素:L0,U0=L1,U1=L2,...,UhistSize[i]−2=LhistSize [i]−1,UhistSize[i]−1 。不在 L0 和 UhistSize[i]−1 之间的数组元素不计入直方图中。

    uniform 指示直方图是否均匀的标志

       accumulate 累积标志。如果设置了,直方图在分配时不会被清除。此功能使您能够从多组数组计算单个直方图,或及时更新直方图。

        这是一个重载成员函数,为方便起见而提供。它与上述函数的不同之处仅在于它接受的参数。 该重载函数使用 SparseMat 进行输出。

        这是一个重载成员函数,为方便起见而提供。它与上述函数的不同之处仅在于它接受的参数。 该重再函数仅支持统一直方图。 range 参数可以是空向量,也可以是 histSize.size()*2 元素(histSize.size() 元素对)的展平向量。每对的第一个和第二个元素指定下边界和上边界。

用法示例

新建一个控制台应用程序Project。在源程序中加入如下代码:

#include <iostream>
#include<opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{Mat src = imread("1.jpeg");if (src.empty()){cout << "Cann't open the image!" << endl;return -1;}imshow("Src", src);vector<Mat> bgr;split(src, bgr);int numbins = 256;float range[] = { 0, 256 };const float* histRange = { range };Mat bhist, ghist, rhist;calcHist(&bgr[0], 1, 0, Mat(), bhist, 1, &numbins, &histRange);calcHist(&bgr[1], 1, 0, Mat(), ghist, 1, &numbins, &histRange);calcHist(&bgr[2], 1, 0, Mat(), rhist, 1, &numbins, &histRange);int width = 512;int height = 300;Mat histImage(height, width, CV_8UC3, Scalar(127, 127, 127));normalize(bhist, bhist, 0, height, NORM_MINMAX);normalize(ghist, ghist, 0, height, NORM_MINMAX);normalize(rhist, rhist, 0, height, NORM_MINMAX);int binStep = cvRound((float)width / numbins);for (int i = 1; i < numbins; i++){line(histImage, Point(binStep * (i - 1), height - cvRound(bhist.at<float>(i - 1))), Point(binStep * i, height - cvRound(bhist.at<float>(i))), Scalar(255, 0, 0));line(histImage, Point(binStep * (i - 1), height - cvRound(ghist.at<float>(i - 1))), Point(binStep * i, height - cvRound(ghist.at<float>(i))), Scalar(0, 255, 0));line(histImage, Point(binStep * (i - 1), height - cvRound(rhist.at<float>(i - 1))), Point(binStep * i, height - cvRound(rhist.at<float>(i))), Scalar(0, 0, 255));}imshow("HistImage", histImage);waitKey(0);
}

试运行,结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/426064.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

若依-原理

1.代码生成器 1.1源码分析 代码生成器分为两个部分&#xff1a; 第一部分涉及将业务表结构导入到系统中 第二部分是点击生成按钮&#xff0c;系统将根据表结构生成相应的前后端代码&#xff0c;并提供下载。 1.表结构说明 gen_table&#xff1a;存储业务表的基本信息 &am…

硬件工程师笔试面试——无线通讯模块

目录 15、无线通讯模块 15.1 基础 无线通讯模块实物图 15.1.1 概念 15.1.2 常见的无线通讯模块及其特点 15.1.3 无线通讯模块参数 15.1.4 无线通讯模块工作原理 15.2 相关问题 15.2.1 如何根据项目需求选择合适的无线通讯模块? 15.2.2 无线通讯模块的安全性如何,如…

[机器学习]聚类算法

1 聚类算法简介 # 导包 from sklearn.datasets import make_blobs import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.metrics import calinski_harabasz_score # 构建数据 x,ymake_blobs(n_samples1000,n_features2,centers[[-1,-1],[0,0],[1…

硬件工程师笔试面试——电机

目录 18、电机 18.1 基础 电机原理图 电机实物图 18.1.1 概念 18.1.2 电机的一些基本分类和特点 18.2 相关问题 18.2.1 不同类型的电机在实际应用中有哪些具体的优势和劣势 18.2.2 在设计一个电机系统时,我应该如何考虑电机的选型和配置? 18.2.3 对于需要频繁启停的…

[SWPUCTF 2021 新生赛]Do_you_know_http

很基础的一题&#xff0c;就是修改发送的数据包 1.拿到题目&#xff0c;他让我们使用这个WLLM浏览器&#xff0c;那我们就用bp抓包&#xff0c;修改成User-Agent:WLLM 2.得到响应有个a.php文件&#xff0c;那我们就访问一下&#xff0c;发现请求权限不够&#xff0c;ip地址不对…

初始MYSQL数据库(5)—— 索引

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; MYSQL 目录 索引的概念 索引选择的数据结构 MySQL中的页的相关知识 索引的分类 主键索引 普通索引 唯一索引 非聚集索引 回表查询…

Qt 边框border - qss样式

border属性 实际上&#xff0c;border并不是一个单独的属性&#xff0c;在Qt样式表中&#xff0c;它通常指的是一系列与边框相关的属性的组合。然而&#xff0c;你也可以在一条样式规则中一次性设置所有这些值&#xff0c;如下所示&#xff1a; QPushButton { border: 2px sol…

Layout 布局组件快速搭建

文章目录 设置主题样式变量封装公共布局组件封装 Logo 组件封装 Menu 菜单组件封装 Breadcrumb 面包屑组件封装 TabBar 标签栏组件封装 Main 内容区组件封装 Footer 底部组件封装 Theme 主题组件 经典布局水平布局响应式布局搭建 Layout 布局组件添加 Layout 路由配置启动项目 …

Unity实战案例全解析:PVZ 植物放置分析

前篇&#xff1a;Unity实战案例全解析&#xff1a;PVZ 植物卡片状态分析-CSDN博客 植物应该如何从卡牌状态转为实物&#xff1f; 其实就只需要考虑两个步骤加一个后续处理&#xff1a; 1.点击卡牌后就实例化 需要一个植物状态枚举&#xff0c;因为卡牌分为拿在手上和种植下…

道路裂缝,坑洼,病害数据集-包括无人机视角,摩托车视角,车辆视角覆盖道路

道路裂缝&#xff0c;坑洼&#xff0c;病害数据集 包括无人机视角&#xff0c;摩托车视角&#xff0c;车辆视角 覆盖道路所有问题 一共有八类16000张 1到7依次为: [横向裂缝, 纵向裂缝, 块状裂缝, 龟裂, 坑槽, 修补网状裂缝, 修补裂缝, 修补坑槽] 道路病害&#xff08;如裂缝、…

MQ(RabbitMQ)笔记

初识MQ 同步调用优缺点 异步调用优缺点 总结&#xff1a; 时效性要求高&#xff0c;需要立刻得到结果进行处理--->同步调用 对调用结果不关心&#xff0c;对性能要求高&#xff0c;响应时间短--->异步调用

人工智能和大模型的简介

文章目录 前言一、大模型简介二、大模型主要功能1、自然语言理解和生成2、文本总结和翻译3、文本分类和信息检索4、多模态处理三、大模型的技术特性1、深度学习架构2、大规模预训练3、自适应能力前言 随着技术的进步,人工智能(Artificial Intelligence, AI)和机器学习(Mac…

NPM如何切换淘宝镜像进行加速

什么是淘宝镜像NPM&#xff1f; 淘宝镜像NPM和官方NPM的主要区别在于服务器的地理位置和网络访问速度。淘宝镜像NPM是由淘宝团队维护的一个npm镜像源&#xff0c;主要服务于中国大陆用户&#xff0c;提供了一个国内的npm镜像源&#xff0c;地址为 https://registry.npmmirror.…

论文阅读 - SELF-REFINE: Iterative Refinement with Self-Feedback

https://arxiv.org/pdf/2303.17651 目录 Abstract Introduction 2 Iterative Refinement with SELF-REFINE Evaluation 3.1 Instantiating SELF-REFINE 3.2 Metrics 3.3 Results Abstract 与人类一样&#xff0c;大型语言模型&#xff08;LLMs&#xff09;并非总能在首次…

【有啥问啥】深入浅出马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法

深入浅出马尔可夫链蒙特卡罗&#xff08;Markov Chain Monte Carlo, MCMC&#xff09;算法 0. 引言 Markov Chain Monte Carlo&#xff08;MCMC&#xff09;是一类用于从复杂分布中采样的强大算法&#xff0c;特别是在难以直接计算分布的情况下。它广泛应用于统计学、机器学习…

【python设计模式2】创建型模式1

目录 简单工厂模式 工厂方法模式 简单工厂模式 简单工厂模式不是23中设计模式中的&#xff0c;但是必须要知道。简单工厂模式不直接向客户端暴露对象创建的细节&#xff0c;而是通过一个工厂类来负责创建产品类的实例。简单工程模式的角色有&#xff1a;工厂角色、抽象产品角…

Redis——常用数据类型string

目录 常用数据结构&#xff08;类型&#xff09;Redis单线程模型Reids为啥效率这么高&#xff1f;速度这么快&#xff1f;&#xff08;参照于其他数据库&#xff09; stringsetgetMSET 和 MGETSETNX&#xff0c;SETEX&#xff0c;PSETEXincr&#xff0c;incrby&#xff0c;decr…

go多线程

1、简单使用&#xff08;这个执行完成&#xff0c;如果进程执行比较久&#xff0c;这里不会等待它们结束&#xff09; package mainimport "time"func main() {go func() {println("Hello, World!")}()time.Sleep(1 * time.Second) }2、wg.Add(数量)使用&…

STM32 定时器 输入捕获

定时器输入捕获 1 工作原理1.1 单个通道的工作原理 2 输入滤波2.1 输入滤波原理 3 边沿检测3.1 边沿检测3.2 信号选择 4 分频5 通道使能 1 工作原理 1.1 单个通道的工作原理 2 输入滤波 2.1 输入滤波原理 fck_INT&#xff1a;内部时钟频率&#xff0c;当PCLKx_Pre为1时&…

prometheus 集成 grafana 保姆级别安装部署

前言 本文 grafana 展示效果只需要 prometheus node_exporter grafana 其他的选择安装 环境和版本号 系统: CentOS 7.9 prometheus: 2.54.1 pushgateway: 1.9.0 node_exporter: 1.8.2 alertmanager: 0.27.0 grafana:11.2.0 官网:https://prometheus.io/ 下载地址:h…