图像直方图的计算

1.1 cv.calcHist()函数,函数原型如下:

void cv::calcHist	(	const Mat * 	images,int 	nimages,const int * 	channels,InputArray 	mask,OutputArray 	hist,int 	dims,const int * 	histSize,const float ** 	ranges,bool 	uniform = true,bool 	accumulate = false )		

参数解释:
images:需要计算直方图的源图像阵列集;注意:它们都应该具有相同的深度、CV_8U、CV_16U或CV_32F以及相同的大小。它们中的每一个都可以具有任意数量的通道。
nimages:这个图像阵列中,图像的个数
channels:用于计算直方图中的每个维度的每个通道的列表,需要统计的图像的通道集合(是一个整型数组,且数组值不可变)。
mask:掩膜,如果掩膜非空, 那么这个掩膜必须是和源图像阵列中的图像同样大小的8位图像数组。
hist:存放经过直方图计算后的图像
dims:直方图的维度,直方图维度必须为正且不大于CV_MAX_DIMS(在当前OpenCV版本中等于32)
histSize:每个维度上直方图的尺寸大小
ranges:每个维度上直方图二进制边界的维度数组的数组,是一个二位数组。当直方图是均匀的(uniform=true)时,对于每个维度,只需指定第0个直方图的下(含)边界和最后一个直方图的上(不含)边界即可,即,在均匀直方图的情况下,每个范围是2个元素的阵列。当直方图不一致(uniform=false)时,则每个范围i中包含histSize[i]+1个元素:L0,U0=L1,U1=L2,....... ,UhistSize[i]−2=LhistSize[i]−1,UhistSize[i]−1。不在L0和UhistSize[i]−1之间的数组元素不计入直方图中。
uniform:直方图是否进行归一化处理,true为是,false为否
accumulate:累计,是否累计,如果已设置,则分配直方图时不会在开始时清除直方图。此功能使您能够从多组数组中计算单个直方图,或及时更新直方图。

实例代码

#include "opencv2/highgui.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>using namespace std;
using namespace cv;int main(int argc, char** argv)
{Mat src, dst;String imageName( "demo.jpg" ); //图像名src = imread( imageName ); // 读取这个路径下的图片放在这个src容器当中if( src.empty() ) //图片是否为空{ return -1; }vector<Mat> bgr_planes; // 创建源图像的图像容器vectorsplit( src, bgr_planes );//将这个图像在RGB三个通道分别分离出来。记得到三个通道的三张图片存放在bgr_planes中int histSize = 256; //设置直方图大小float range[] = { 0, 256 } ; // 指定饱和度范围在0~255中。const float* histRange = { range };bool uniform = true; bool accumulate = false;Mat b_hist, g_hist, r_hist;calcHist( &bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate );calcHist( &bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate );calcHist( &bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate ); //上边是计算三个通道三张图片的直方图。//下边是画出这三条折线图(过点划线),当然你也可以使用rectangle去绘制条形图。当然如果是Python,则可以借助三方库matlab中的方法直接完成绘图。int hist_w = 512; int hist_h = 400; //直方图宽和高int bin_w = cvRound( (double) hist_w/histSize );//得到二进制边界为直方图宽度除以直方图大小之后的结果转换为双精度浮点数之后再取最近的整数得到额结果。Mat histImage( hist_h, hist_w, CV_8UC3, Scalar( 0,0,0) ); 
//利用Mat的重写的构造函数构造一个histImage图像对象
//用于存储均质化(规范化一个数组的标准范围或者数组中元素值的范围)的结果。
//这个图像的大小和直方图一样大。//标准化处理:normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );for( int i = 1; i < histSize; i++ )//下边就是采点划线的过程了。{line( histImage, Point( bin_w*(i-1), hist_h - cvRound(b_hist.at<float>(i-1)) ) ,Point( bin_w*(i), hist_h - cvRound(b_hist.at<float>(i)) ),Scalar( 255, 0, 0), 2, 8, 0  );line( histImage, Point( bin_w*(i-1), hist_h - cvRound(g_hist.at<float>(i-1)) ) ,Point( bin_w*(i), hist_h - cvRound(g_hist.at<float>(i)) ),Scalar( 0, 255, 0), 2, 8, 0  );line( histImage, Point( bin_w*(i-1), hist_h - cvRound(r_hist.at<float>(i-1)) ) ,Point( bin_w*(i), hist_h - cvRound(r_hist.at<float>(i)) ),Scalar( 0, 0, 255), 2, 8, 0  );}namedWindow("calcHist Demo", WINDOW_AUTOSIZE );imshow("calcHist Demo", histImage );waitKey(0);return 0;


 

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

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

相关文章

如何使得Macos的剪切板感知fileURL并当fileURL被执行paste 动作时 回调到某个监听的函数 从而来填充file content

问题及尝试&#xff1a; 我在做一个跨平台文件拷贝的功能&#xff0c;文件可能是从其他操作系统比如Linux 或者Windows 拷贝到Macos上&#xff0c; 但是我试过所有可以hook NSPasteboard的方法&#xff0c;确实没有找到可以监听macos 剪切板的方法&#xff0c;因为fileURL 确实…

邮件接口代码案例中的SMTP服务器配置详解!

邮件接口代码案例的编写技巧&#xff1f;如何集成邮件服务API&#xff1f; 对于开发者来说&#xff0c;邮件接口代码案例提供了丰富的参考和实践机会&#xff0c;其中SMTP服务器配置是不可或缺的一环。AoKSend将详细讲解如何配置SMTP服务器&#xff0c;并解析其中的重要参数和…

【408计算机组成原理】计算机硬件的发展

计算机硬件的发展 机械计算设备&#xff1a;早期的计算机起源于机械计算设备&#xff0c;像算盘和帕斯卡计算机&#xff0c;它们使用齿轮和机械部件进行简单的计算。 真空管计算机&#xff1a;20世纪40年代&#xff0c;第一代电子计算机使用真空管作为主要的电子元件。这些计算…

【自动化测试】Selenium自动化测试框架 | 相关介绍 | Selenium + Java环境搭建 | 常用API的使用

文章目录 自动化测试一、selenium1.相关介绍1.Selenium IDE2.Webdriverwebdriver的工作原理&#xff1a; 3.selenium Grid 2.Selenium Java环境搭建3.常用API的使用1.定位元素2.操作测试对象3.添加等待4.打印信息5.浏览器的操作6.键盘事件7.鼠标事件8.定位一组元素9.多层框架定…

2024年6月京东睡眠呼吸暂停和低通气事件检测赛题-baseline

赛题地址&#xff1a;DC竞赛-大数据竞赛平台 (datacastle.cn) 一、数据集介绍 train_x训练数据集特征描述&#xff0c;其样本分布不均匀&#xff0c;0样本29808&#xff0c;1样本3221&#xff0c;2样本4520&#xff0c;共计37549条样本 第一维度&#xff1a;60 位受试样本数总…

一个多智能体AI搜索工具

brainstorm.cool 是最近刚留意到的一个小工具&#xff0c;因为好奇去体验了一把&#xff0c;简单写一下使用体验。 初体验 界面比较清爽&#xff0c;检索结果包括Status、多Agent回答、Relates和右侧的Sources。从Status可以大致了解检索过程&#xff1a;Web Search - Decisio…

pythons工具——裁剪labelme的json不规则多边形标签保存成矩形图像

原图labelme标注 使用以下程序&#xff0c;裁剪labelme的json不规则多边形标签保存成矩形图像 import os import cv2 import math import json import numpy as np from PIL import Image, ImageDrawdef calculate_bounding_box(points):"""计算多边形的最小外…

二次封装 el-dialog 实现 全屏和最小化 功能

效果 封装后的组件 <template><el-dialog v-model"dialogVisible" :show-close"false" :fullscreen"fullscreen" draggable overflow><template #header"{ close }"><div><span style"font-weight: b…

图像增强及运算篇之图像掩膜直方图和HS直方图

一.图像掩膜直方图 如果要统计图像的某一部分直方图&#xff0c;就需要使用掩码&#xff08;蒙板&#xff09;来进行计算。假设将要统计的部分设置为白色&#xff0c;其余部分设置为黑色&#xff0c;然后使用该掩膜进行直方图绘制&#xff0c;其完整代码如下所示。 # -*- codi…

OurBMC运营委员会2024年上半年度例会顺利召开

6 月 27 日&#xff0c;OurBMC 社区运营委员会 2024 年上半年度例会顺利召开。本次会议采用线上线下结合的方式&#xff0c;各委员在会上听取了 2024 年上半年社区运营委员会的工作总结汇报&#xff0c;并规划了下半年运营重点工作&#xff0c;同时针对社区活动改进、运营规划开…

C语言一些逆置算法

目录 整数逆置 数组逆置 矩阵转置 整数逆置 如7234变为4327 int Reversed(int n){int x,reversed_n0;while(n!0){xn%10; reversed_nreversed_n*10x;nn/10;}return reversed_n; }数组逆置 将数组{1,2,3,4,5,6}逆置为{6,5,4,3,2,1} void Reverse(int a[],int l,int r){w…

【OpenSSH】关于操作系统中的自带的SSH你知道怎么用吗

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、如何开启SSH服务2.1 什么是OpenSSH2.2 对于Windows 10, Windows 11系统2.2.1 如…

车载测试工程师在行业中有哪些挑战需要面对?

车载测试工程师在行业中面临着多方面的挑战&#xff0c;这些挑战涵盖了技术、安全、法规以及市场环境等多个层面。 1. 技术挑战&#xff1a; 复杂性与集成性&#xff1a;现代汽车系统由众多模块和子系统组成&#xff0c;包括发动机控制、安全系统、娱乐系统、导航系统等。这些系…

二、golang基础之常量

文章目录 一、常量&#xff08;一&#xff09;含义&#xff08;二&#xff09;定义&#xff08;1&#xff09;显式类型定义&#xff1a;&#xff08;2&#xff09;显式类型定义&#xff1a;&#xff08;3&#xff09;例子 &#xff08;三&#xff09;内置函数 二、优雅的常量 i…

【已发布】可视化旅游推荐系统的设计与实现+代码

可视化旅游推荐系统的设计与实现 摘要&#xff1a;随着旅游业的蓬勃发展和人们对个性化旅游体验的追求&#xff0c;旅游推荐系统逐渐成为帮助游客规划行程、发现有趣景点的重要工具。本论文旨在设计并实现一个基于可视化技术的旅游推荐系统&#xff0c;通过整合多源数据、运用…

【C++】————类和对象(上)

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;C 创作时间 &#xff1a;2024年6月21日 一、类与对象的初步认识 1、类其实就是对对象的抽象&#xff0c;而对象就是对类的具体实例 类不占用内存&#xff0c;而对象占用内存。 2、面向对象与面向过程 C语言是面…

无人机行业市场发展现状及前景

无人机行业市场发展现状及前景分析如下&#xff1a; 一、无人机行业市场发展现状 企业数量与规模&#xff1a; 截至2024年03月&#xff0c;全国无人机相关企业数量达到8628家&#xff0c;显示出无人机行业的蓬勃发展态势。全国实名注册的民用无人机已达104.9万架&#xff0c;…

【03】从0到1构建AI生成思维导图应用 -- Agent 搭建

【03】从0到1构建AI生成思维导图应用 – Agent 搭建 大家好&#xff01;最近自己做了一个完全免费的AI生成思维导图的网站&#xff0c;支持下载&#xff0c;编辑和对接微信公众号&#xff0c;可以在这里体验&#xff1a;https://lt2mind.zeabur.app/ 上一章&#xff1a;https…

Redis--注册中心集群 Cluster 集群-单服务器

与“多服务器集群”一致需要创建redis配置模板 参照以下链接 CSDN 创建redis容器 node01服务器上创建容器 docker run -d --name redis-6381 --net host --privilegedtrue \ -v /soft/redis-cluster/6381/conf/redis.conf:/etc/redis/redis.conf \ -v /soft/redis-cluster/6…

將IP地址改成自動獲取的詳細步驟

IP地址是設備在網路中的唯一標識&#xff0c;就像你家的門牌號一樣。每個連接到互聯網的設備都需要一個IP地址&#xff0c;以便進行數據通信。自動獲取IP地址&#xff0c;通常是指通過DHCP伺服器自動分配IP地址。這樣做的好處是&#xff0c;用戶無需手動配置IP地址&#xff0c;…