直方图概念

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

直方图最常见的几个属性:
- 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. 章节十六、9-Listeners监听器

    一.IInokedMethodListener 1.实现一个类来监听testcase的运行情况. package listenerspackage; import org.testng.IInvoke ...

  2. .NET分布式大规模计算利器-Orleans(一)

      写在前面 Orleans是基于Actor模型思想的.NET领域的框架,它提供了一种直接而简单的方法来构建分布式大规模计算应用程序,而无需学习和应用复杂的并发或其他扩展模式.我在2015年下半年开始 ...

  3. 教你用java统计目录下所有文档的词频

    本文是统计目录下所有文档的词频top10,非单个文档,包含中文和英文. 直接上代码: package com.huawei.wordcount; import java.io.BufferedRead ...

  4. 网络编程之多线程——GIL全局解释器锁

    网络编程之多线程--GIL全局解释器锁 一.引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that preven ...

  5. Java中一维,二维数组的静态和动态初始化

    今天我们要开始来讲讲Java中的数组,包括一维数组和二维数组的静态初始化和动态初始化 数组概述: 数组可以看成是多个相同类型数据的组合,对这些数据的统一管理; 数组变量属于引用数据类型,数组也可以看成 ...

  6. Java基本数据类型转换及运算符

    上次我们说到完了Java中的基本数据类型,今天我们来说说Java中的基本数据类型转换和Java中的运算符 基本数据类型转换 java中可以从任意基本数据类型转型到外的基本数据类型 注意:(boolea ...

  7. Django&,Flask&pyrthon原生sql语句 基本操作

    Django框架 ,Flask框架 ORM 以及pyrthon原生sql语句操作数据库 WHAT IS ORM? ORM( Object Relational Mapping) 对象关系映射 , 即通 ...

  8. springboot jpa使用

    1.添加pom依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...

  9. .netcore+vue+elementUI 前后端分离---支持前端、后台业务代码扩展的快速开发框架

    框架采用.NetCore + Vue前后端分离,并且支持前端.后台代码业务动态扩展,框架内置了一套有着20多种属性配置的代码生成器,可灵活配置生成的代码,代码生成器界面配置完成即可生成单表(主表)的增 ...

  10. 不吹不黑,今天我们来聊一聊 Kubernetes 落地的三种方式

    作者 | 王国梁  Kubernetes 社区成员与项目维护者原文标题<Kubernetes 应用之道:让 Kubernetes落地的"三板斧">,首发于知乎专栏:进击 ...