③const int* channels:图像的通道是一个数组, 若是是灰度图像则channels[1]={0};若是是彩色图像则channels[3]={0,1,2};若是只是求彩色图像第2个通道的直方图则channels[1]={1};
④IuputArray mask:掩膜, 仅对指定元素操作, 默认环境设置为一个空图像, 即:Mat() 。
⑤OutArray hist:计较获得的直方图
⑥int dims:获得的直方图的维数, 灰度图像为1维, 彩色图像为3维
⑦const int* histSize:直方图横坐标的区间数 。 若是是10, 则它会横坐标分为10份, 然后统计每个区间的像素点总和
⑧const float** ranges:这是一个二维数组, 用来指出每个区间的规模
⑨uniform参数表白直方图是否等距,
⑩accumulate与多图像下直方图的显示与存储有关;
文章插图
3注重的处所:
关于calHist计较直方图的成果hist,
hist的成果为统计的灰度级0,1, …, 255的数目;
暗示一维或三维的矩阵;
对于直方图成果矩阵, 拜候形式为:
cout<<hist.at<float>(i)<<l;
文章插图
4灰度图的直方图绘制:
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\features2d\features2d.hpp>
#include <opencv2\core\core.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat srcImage = imread("mask.jpg");
imshow("【原图】", srcImage);
int channels = 0;
MatND dstHist;
//接下来是直方图的每一个维度的柱条的数量
int histSize[] = { 256 };
//若是这里写当作int histSize = 256;
//那么下面挪用计较直方图的函数的时辰, 该变量需要写 &histSize
//界说变量用来存储单个维度的数值的取值规模
float midRanges[] = { 0, 256 };
const float *ranges[] = { midRanges };
calcHist(&srcImage, 1, &channels, Mat(), dstHist, 1, histSize, ranges, true, false);
//calcHist 函数挪用竣事后,
//dstHist变量中将储存了直方图的信息;
//用dstHist的模版函数 at<Type>(i)获得第i个柱条的值
//at<Type>(i, j)获得第i个而且第j个柱条的值
Mat drawImage = Mat::zeros(Size(256, 256), CV_8UC3);
double g_dHistMaxValue;
minMaxLoc(dstHist, 0, &g_dHistMaxValue, 0, 0);
for (int i = 0; i < 256; i++)
{
int value = https://vvvtt.com/article/cvRound(dstHist.at
推荐阅读
- 股票手续费是怎么计算的?
- 儿童计算机编程 儿童计算机教育中心
- 营养成分表中的“能量”如何计算
- 600除以24的简便计算 600除以24的简便计算方法
- 59x22的竖式怎么写 59乘22的竖式计算
- 如何购买国债合适,国债收益率如何计算
- 8个8怎样等于一千 8个8等于一千的计算方法
- 股票知识:股价偏离值怎样计算?
- 怎样将计算机内的文件进行归类存放
- OpenCV例程:针对对比度差的图像,目标分割方法