【 OpenCV】——灰度直方图

【 OpenCV】——灰度直方图


前言

本文介绍了灰度直方图的基础内容。


对函数参数的解释

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,//表示是否进行归一化,默认为true
bool accumulate=false //累计标识符(默认为false),主要是允许多从个阵列中计算单个直方图
//或者用于在特定的时间更新直方图
}

使用步骤

##1.引入库
#include<opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/imgcodecs.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2\imgproc\types_c.h>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
	Mat img;
	img = imread("F:\\专高CV2\\图片\\520.jpg");
	imshow("原图", img);
	Mat hui;
	cvtColor(img, hui, CV_BGR2GRAY);
	int bins = 256;
	int hist_size[] = { bins };
	float range[] = { 0,256 };
	const float *ranges[] = { range };
	MatND hist;
	int channels[] = { 0 };
	//计算出灰度直方图
	calcHist(&hui, 1, channels, Mat(), hist, 1, hist_size, ranges);
	//画出直方图
	double max_val;
	minMaxLoc(hist, 0, &max_val, 0, 0);//定位矩阵中最小值、最大值的位置
	int scale = 2;
	int hist_height = 256;
	Mat hist_img = Mat::zeros(hist_height, bins*scale, CV_8UC3);//创建一个全0的特殊矩阵
	for (int i = 0; i < bins; i++)
	{
		float bin_val = hist.at<float>(i);
		int inten = cvRound(bin_val*hist_height / max_val);//要绘制高度
		//画矩形
		rectangle(hist_img, Point(scale*i, hist_height - 1), Point((i + 1)*scale - 1, hist_height - inten), CV_RGB(255, 255, 255));


	}
	imshow("灰度直方图", hist_img);
	waitKey(0);
}

效果图展示

在这里插入图片描述

总结

以上是一个简单的灰度直方图展示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉生☜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值