直方图概念

  上述直方图概念是基于图像像素值,其实对图像梯度、每个像素的角度、等一切图像的属性值,我们都可以建立直方图。
        这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见的.

直方图最常见的几个属性:
- dims 表示维度,对灰度图像来说只有一个通道值dims=
- bins 表示在维度中子区域大小划分,bins=,划分为256个级别
- range 表示值得范围,灰度值范围为[~]之间
// 把多通道图像分为多个单通道图像
split(
  const Mat &src, //输入图像
  Mat* mvbegin
)// 输出的通道图像数组 calcHist(
  const Mat* images,    //输入图像指针
  int images,        // 图像数目
  const int* channels,   // 通道数
  InputArray mask,     // 输入mask,可选,不用
  OutputArray hist,   //输出的直方图数据
  int dims,         // 维数
  const int* histsize,  // 直方图级数
  const float* ranges,   // 值域范围
  bool uniform,       // true by default
  bool accumulate     // false by defaut
)
int main(int argc, char** argv) {
Mat src = imread(STRPAHT2);
if (!src.data) {
printf("could not load image...\n");
return -;
}
// 分通道显示
vector<Mat> bgr_planes;
split(src, bgr_planes);
//imshow("single channel 0", bgr_planes[0]);
//imshow("single channel 1", bgr_planes[1]);
//imshow("single channel 2", bgr_planes[2]); // 计算直方图
int histSize = ;
float range[] = { , };
const float *histRanges = { range };
Mat b_hist, g_hist, r_hist;
calcHist(&bgr_planes[], , , Mat(), b_hist, , &histSize, &histRanges, true, false);
calcHist(&bgr_planes[], , , Mat(), g_hist, , &histSize, &histRanges, true, false);
calcHist(&bgr_planes[], , , Mat(), r_hist, , &histSize, &histRanges, true, false); // 归一化
int hist_h = ;
int hist_w = ;
int bin_w = hist_w / histSize;
Mat histImage(hist_w, hist_h, CV_8UC3, Scalar(, , ));
normalize(b_hist, b_hist, , hist_h, NORM_MINMAX, -, Mat());
normalize(g_hist, g_hist, , hist_h, NORM_MINMAX, -, Mat());
normalize(r_hist, r_hist, , hist_h, NORM_MINMAX, -, Mat()); // render histogram chart
for (int i = ; i < histSize; i++) {
line(histImage, Point((i - )*bin_w, hist_h - cvRound(b_hist.at<float>(i - ))),
Point((i)*bin_w, hist_h - cvRound(b_hist.at<float>(i))), Scalar(, , ), , LINE_AA); line(histImage, Point((i - )*bin_w, hist_h - cvRound(g_hist.at<float>(i - ))),
Point((i)*bin_w, hist_h - cvRound(g_hist.at<float>(i))), Scalar(, , ), , LINE_AA); line(histImage, Point((i - )*bin_w, hist_h - cvRound(r_hist.at<float>(i - ))),
Point((i)*bin_w, hist_h - cvRound(r_hist.at<float>(i))), Scalar(, , ), , LINE_AA);
}
imshow("OUTPUT_T", histImage); waitKey();
return ;
}

opencv::直方图计算的更多相关文章

  1. OpenCV——直方图计算、寻早最值位置和对比匹配(判断两幅图的相似程度)

  2. OPENCV直方图与匹配

    直方图可以用来描述不同的参数和事物,如物体的色彩分布,物体的边缘梯度模版以及目标位置的当前假设的概率分布. 直方图就是对数据进行统计的一种方法,并且将统计值定义到一系列定义好的bin(组距)中,获得一 ...

  3. opencv:直方图操作

    示例程序: #include <opencv.hpp> using namespace cv; using namespace std; int main() { Mat src, dst ...

  4. opencv直方图该怎么画

    图像直方图是反映图像中像素分布特性的统计表,一般显示如下: 其中横坐标代表的是图像像素的种类,或者说是灰度级,纵坐标代表的是每一级灰度下像素数或者该灰度级下像素数在所有图像总像素数总所占的百分比. 直 ...

  5. OpenCV直方图(直方图、直方图均衡,直方图匹配,原理、实现)

    1 直方图 灰度级范围为 \([0,L-1]\) 的数字图像的直方图是离散函数 \(h(r_k) = n_k\) , 其中 \(r_k\) 是第\(k\)级灰度值,\(n_k\) 是图像中灰度为 \( ...

  6. opencv直方图均衡化

    #include <iostream> #include "highgui.h" #include "cv.h" #include "cx ...

  7. opencv直方图拉伸

    1.首先计算出一幅图像的直方图 //计算直方图 cv::MatND ImageHist::getHist(const cv::Mat &image){ cv::Mat im; if(image ...

  8. Win8 Metro(C#)数字图像处理--3.3图像直方图计算

    原文:Win8 Metro(C#)数字图像处理--3.3图像直方图计算 /// <summary> /// Get the array of histrgram. /// </sum ...

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

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

随机推荐

  1. sql字段为逗号分开的字符串值的关联查询

    1.TREE表: [strID] [int] IDENTITY(1,1) NOT NULL,[strName] [nvarchar](50) NOT NULL, 2.SubInfo CREATE TA ...

  2. 使用PrepareStatement

    包结构: 第一步:编写获取连接工具类 package com.atguigu.jdbc; import java.io.IOException; import java.io.InputStream; ...

  3. python接口测试(post,get)-传参(data和json之间的区别)

    python接口测试如何正确传参: POST 传data:data是python字典格式:传参data=json.dumps(data)是字符串类型传参 #!/usr/bin/env python3 ...

  4. python 数据分析师

    简介 越来越多的政府机关.企事业单位将选择拥有数据分析师资质的专业人士为他们的项目做出科学.合理的分析.以便正确决策:越来越多的风险投资机构把数据分析师所出具的数据分析报告作为其判断项目是否可行及是否 ...

  5. rpm -qa|grep nfs >/dev/null 2>&1作用

    在使用一些shell命令是,经常会用到rpm -qa|grep nfs >/dev/null 2>&1之类的命令,该命令干嘛用的呢? 其实这个命令就是将rpm -qa|grep n ...

  6. 快学Scala 第六课 (类getter和setter)

    类getter和setter 如果字段定义是private[this], 字段是私有的,但不生成getter和setter方法. class Counter { private[this] var v ...

  7. git checkout 提示 “error: The following untracked working tree files would be overwritten by checkout” 解决

    问题描述 Windows 或者 macOS 操作系统中,文件名是不区分大小写的.对于已经提交到仓库中的文件修改文件名的大小写,然后又用 git rm 命令将老文件从 Git 仓库删除掉,并保存下新的文 ...

  8. 【TencentOS tiny】深度源码分析(1)——task

    任务的基本概念 从系统的角度看,任务是竞争系统资源的最小运行单元.TencentOS tiny是一个支持多任务的操作系统,任务可以使用或等待CPU.使用内存空间等系统资源,并独立于其它任务运行,理论上 ...

  9. Java11月18日

    动手动脑 实验一: 1. 下边的程序运行结果是什么? 2.你如何解释会得到这样的输出? 3.计算机是不会出错的,之所以得到这样的运行结果也是有原因的那么从这些运行结果中,你能总结出Java的哪些语法特 ...

  10. 用深度学习做命名实体识别(七)-CRF介绍

    还记得之前介绍过的命名实体识别系列文章吗,可以从句子中提取出人名.地址.公司等实体字段,当时只是简单提到了BERT+CRF模型,BERT已经在上一篇文章中介绍过了,本文将对CRF做一个基本的介绍.本文 ...