目的:生成直方图
直方图计算原理详解
https://blog.csdn.net/keith_bb/article/details/56680997?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-6
直方图概念
对于图像像素值、图像梯度、每个像素的角度等一切图像的属性值,都可以建立直方图,
不过基于图像像素灰度直方图是最常见的
直方图常见的几个属性:
dims表示维度(通道数),对灰度图像来说只有一个通道值dims=1
bins表示在维度中子区域大小划分,bins=256代表划分为256个级别
range表示值的范围,灰度范围为0~255之间
API学习
split
分通道split
将3通道图像分为多个单通道图像存放在单通道数组中
split
(
const Mat &src,//输入图像
Mat mvbegin//输出单通道图像数组
)*
calcHist直方图计算
计算直方图,获得每一个通道每一个像素值对应的频次,
存放在对应的数组中
calcHist (Hist-直方图)
(
const Mat images,//输入图像指针
int images,//图像数目
const int channels,//通道数
InputArray hist,//输出的直方图数据
int dims,//维数 (灰度直方图只有一个维度 所以我们默认为一维)
const int histsize,//直方图级数 (256)
const float* ranges,//值域范围 (0-256)
bool uniform,//true by default
bool accumulate//false by default
)***
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
Mat src, dst;
void Split(int, void*);
void CalcHist(int, void*);
int main()
{
src = imread("D:/实验台/机器视觉/测试图片/盖茨.jpg");
if (src.empty())//如果src这个数据库属性为空
{
cout << "无法打开" << endl;
return -1;
}
imshow("原图", src);
//Split(0,0);
CalcHist(0, 0);
waitKey(0);
return 0;
}
void Split(int, void*)//分通道显示
{
vector