直方图概述

简单来说,直方图就是对数据进行统计的一种方法,这些数据可以是梯度、方向、色彩或任何其他特征。它的表现形式是一种二维统计表,横纵坐标分别是统计样本和该样本对应的某个属性的度量。

计算直方图:calcHist 函数

calcHist 函数用于计算一个或多个阵列的直方图。

void 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 accumul = false);

  • images,输入的数组(图像)或数组集(图像集),他们需为相同深度(CV_8U 或 CV_32F)和相同尺寸。
  • nimages,第一个参数中存放了多少张图象。
  • channels,图像索引,会按照索引顺序依次计算图像直方图(注意,第一张图片索引为 0,以此类推)。
  • mask,可选的掩膜操作,非零掩码元素用于标记待统计元素,需要与输入图像集有相同尺寸。
  • hist,输出的目标直方图,一个二维数组。
  • dims,输出目标直方图的维度。一般设为 1(线)。
  • histSize,x 轴将被分成 histSize 份。
  • ranges,x 的取值范围。
  • uniform,直方图是否归一化的标识符,默认为 true。
  • accumulate,在计算直方图时是否清空传入的 hist。true 表示不清空,false 表示清空。默认为 false。只有在想要统计多个图像序列中的累加直方图时才会设置为 true。

代码示例:

#include<opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
Mat src = imread("C:/Users/齐明洋/Desktop/证件照/6.jpg");
imshow("src", src); //计算 BGR 三通道各自直方图
vector<Mat>bgr();
int channels[] = { ,, };
int histsize[] = { ,, };
float r[] = { , };
const float* ranges[] = { r,r,r };
calcHist(&src, , &channels[], Mat(), bgr[], , &histsize[], &ranges[], true);
calcHist(&src, , &channels[], Mat(), bgr[], , &histsize[], &ranges[], true);
calcHist(&src, , &channels[], Mat(), bgr[], , &histsize[], &ranges[], true); //直方图归一化
//https://www.cnblogs.com/bjxqmy/p/12292421.html
int w = , h = ;
normalize(bgr[], bgr[], h, , NORM_L1);
normalize(bgr[], bgr[], h, , NORM_L1);
normalize(bgr[], bgr[], h, , NORM_L1); //绘制直方图
string names[] = { "b_img","g_img","r_img" };
Mat dst[];//绘在三张背景上
dst[] = Mat(h, w, src.type(), Scalar(, , ));
dst[] = dst[].clone();
dst[] = dst[].clone();
double width[] = { w / histsize[],w / histsize[],w / histsize[] };
Scalar colors[] = { Scalar(,,),Scalar(,,) ,Scalar(,,) };
for (int i = ; i < ; i++) {
for (int j = ; j < histsize[i]; j++) {
Point pre = Point(j*width[i], h);
Point next = Point(j*width[i], h - bgr[i].at<float>(j));
line(dst[i], pre, next, colors[i], );
}
imshow(names[i], dst[i]);
}
waitKey();
}

效果演示:

借鉴博客:https://blog.csdn.net/zhu_hongji/article/details/81663161

opencv —— calcHist、minMaxLoc 计算并绘制图像直方图、寻找图像全局最大最小值的更多相关文章

  1. OpenCV 学习(计算图像的直方图)

    OpenCV 计算图像的直方图 计算图像的直方图是图像处理领域一个非经常见的基本操作. OpenCV 中提供了 calcHist 函数来计算图像直方图.只是这个函数说实话挺难用的,研究了好久才掌握了些 ...

  2. C++ 彩色图像(RGB)三通道直方图计算和绘制,图像逆时针旋转90° 实现代码

    #include "iostream" #include "opencv2/opencv.hpp" #include "vector" us ...

  3. OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1, ...

  4. OpenCV成长之路(4):图像直方图

    一.图像直方图的概念 图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的.纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比. 图 ...

  5. OpenCV成长之路:图像直方图

    http://ronny.blog.51cto.com/8801997/1394115 2014-04-11 13:47:27 标签:opencv 直方图 统计表 原创作品,允许转载,转载时请务必以超 ...

  6. Python 图像处理 OpenCV (16):图像直方图

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  7. opencv——图像直方图与反向投影

    引言 在图像处理中,对于直方图这个概念,肯定不会陌生.但是其原理真的可以信手拈来吗? 本文篇幅有点长,在此列个目录,大家可以跳着看: 分析图像直方图的概念,以及opencv函数calcHist()对于 ...

  8. 【图像处理】基于OpenCV实现图像直方图的原理

    背景 图像的直方图是衡量图像像素分布的一种方式,可以通过分析像素分布,使用直方图均衡化对图像进行优化,让图像变的清晰. opencv官方对图像直方图的定义如下: 直方图是图像中像素强度分布的图形表达方 ...

  9. OpenCV成长之路(5):图像直方图的应用

    正如第4篇文章所说的图像直方图在特征提取方面有着很重要的作用,本文将举两个实际工程中非常实用的例子来说明图像直方图的应用. 一.直方图的反向映射. 我们以人脸检测举例,在人脸检测中,我们第一步往往需要 ...

随机推荐

  1. Java入门 - 语言基础 - 02.开发环境配置

    原文地址:http://www.work100.net/training/java-environment-setup.html 更多教程:光束云 - 免费课程 开发环境配置 序号 文内章节 视频 1 ...

  2. (转自360安全客)深入理解浏览器解析机制和XSS向量编码

    (译者注:由于某些词汇翻译成中文后很生硬,因此把相应的英文标注在其后以便理解.这篇文章讲的内容很基础,同时也很重要,希望对大家有所帮助.) 这篇文章将要深入理解HTML.URL和JavaScript的 ...

  3. Docker 安装 Elasticsearch+kibana

    1 下载镜像 docker pull elasticsearch:7.4.1 docker pull kibana:7.4.1 拉取的镜像如下: 2 创建network 创建一个网络,名字任意取,使得 ...

  4. python读取json文件

    比如下图json数据,场景需要读取出wxid这项数据,然后传给后面的函数去使用 具体的脚本为 import json f =open('d:\\1024.json',encoding='utf-8') ...

  5. Ganglia安装及配置

    Ganglia安装及配置root用户下yum安装所依赖的环境(实际生产环境都已安装)yum -y install apr-develapr-util check-devel cairo-devel p ...

  6. 小白学 Python 数据分析(2):Pandas (一)概述

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 概览 首先还是几个官方链接放一下: Pandas 官网:https://pandas.pydata.or ...

  7. SpringBoot分布式篇Ⅶ --- 整合Dubbo

    在分布式系统中, 国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot,Spring Cloud. 分布式系统: 一.Zookeepe ...

  8. JVM性能分析 | 一次生产系统Full GC问题分析与排查总结

    一次生产系统Full GC问题分析与排查总结 背景 最近某线上业务系统生产环境频频CPU使用率过低,频繁告警,通过重启可以缓解,但是过了一段时间又会继续预警,线上两个服务节点相继出现CPU资源紧张,导 ...

  9. JDK的下载及安装教程图解(超详细哦~)

    一.本人电脑系统介绍及JDK下载途径 1.先说明一下我的电脑为win10系统,64位操作系统~ 2.我选择下载的JDK版本为1.8版本.给大家来两个下载渠道,方便大家的下载~ JDK官网:https: ...

  10. 85道Java微服务面试题整理(助力2020面试)

    微服务 面试题 1.您对微服务有何了解? 2.微服务架构有哪些优势? 3.微服务有哪些特点? 4.设计微服务的最佳实践是什么? 5.微服务架构如何运作? 6.微服务架构的优缺点是什么? 7.单片,SO ...