直方图绘制(折线图)

本文介绍了如何使用OpenCV库来计算和绘制图像的直方图,包括基本概念、API说明以及程序实例,涉及直方图的维度、划分、范围等属性,并展示了归一化和坐标转换的方法。
摘要由CSDN通过智能技术生成

基本概念

  • 对于图像梯度、像素值、像素角度等一切图像的属性值,都可以通过统计建立直方图。
    基于图像像素灰度直方图比较常见。
  • 直方图常见属性:
    dims 表示维度,对灰度图像来说只有一个通道值,dims=1;
    bins 表示在维度中子区域大小划分,划分256个级别则 bins=256;
    range 表示值得范围,灰度值范围为 [0~255] 之间;

API说明

  • 把多通道图像分为多个单通道图像
    split(
    InputArray src, // 输入图像
    *Mat mvbegin // 输出的通道图像数组
    )

  • 直方图计算
    calcHist(
    const Mat* images, // 输入图像
    int nimages, // 输入图像的个数
    const int* channels, // 通道数?(用法暂时未知)
    InputArray mask, // 输入mask,忽略(用法暂时未知)
    OutputArray hist, // 输出的直方图数据
    int dims, // 维数,需要统计直方图通道的个数
    const int* histSize, // 直方图级数,bins
    const float** ranges, // 值域范围,统计像素值区间
    bool uniform = true, // 是否对得到的直方图数组进行归一化处理
    bool accumulate = false // 在多个图像时,是否累计算像素值得个数
    )

程序实例

int main()
{
   
	src = imread("E:/Image/cat.jpg");
	if (src.empty())
	{
   
		cout << "could not load image..." << endl;
		return 0;
	}
	imshow("src image", src);

	//分通道
	vector<Mat> bgr_mvbegin;
	split(src, bgr_mvbegin);

	//计算直方图
	int histSize = 256;
	float range[] = {
    0,255 };
	const float* histRange = {
    range };
	Mat b_hist, g_hist, r_hist;
	calcHist(&bgr_mvbegin[0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值