23 OpenCV直方图计算calcHist

本文介绍了如何使用OpenCV的calcHist函数计算图像直方图,包括直方图的基本概念、calcHist的参数解析以及一个示例应用。通过dims、bins和range等参数设置,可以定制化地计算和分析图像的各种特性。
摘要由CSDN通过智能技术生成

一、直方图

图像直方图是基于图像像素值,其实对图像梯度、每个像素的角度、等一切图像的属性值,我们都可以建立直方图。直方图最常见的几个属性:

  • dims: 需要统计的特征的数据
  • bins:每个特征空间子区段的数据
  • range: 每个特征空间的取值范围

在opencv中提供了calcHist()函数计算图像的直方图,计算完成后可以采用前opencv中的绘图函数如rectangle、line()等绘制显示出来

二、calcHist

void cv::calcHist   (   const Mat *     images,
        int     nimages,
        const int *     channels,
        InputArray      mask,
        OutputArray     hist,
        int     dims,
        const int *     histSize,
        const float **      ranges,
        bool    uniform = true,
        bool    accumulate = false 
    )   
  • images: 输入的图像或数组,它们的深度必须为CV_8U, CV_16U或CV_32F中的一类,尺寸必须相同。
  • nimages: 输入数组个数,也就是第一个参数中存放了几张图像,有几个原数组
  • channels: 需要统计的通道dim,第一个数组通道从0到image[0].channels()-1,第二个数组从image[0].channels()到images[0].channels()+images[1].channels()-1,以后的数组以此类推
  • mask: 可选的操作掩码。如果此掩码不为空,那么它必须为8位并且尺寸要和输入图像images[i]一致。非零掩码用于标记出统计直方图的数组元素数据
  • hist: 输出的目标直方图,一个二维数组
  • dims: 需要计算直方图的维度,必须是正数且并不大于CV_MAX_DIMS(在opencv中等于32)
  • histSize: 每个维度的直方图尺寸的数组
  • ranges: 每个维度中bin的取值范围
  • uniform: 直方图是否均匀的标识符,有默认值true
  • accumulate: 累积标识符,有默认值false,若为true,直方图再分配阶段不会清零。此功能主要是允许从多个阵列中计算单个直方图或者用于再特定的时间更新直方图.

三、示例

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
   
	Mat src;
	// 1. 加载源图像
	src = imread("images/02.png");
	imshow("input Image", src);

	// 2. 在R、G、B平面中分离源图像,把多通道图像分为多个单通道图像。使用OpenCV函数cv::split。
	vector<Mat> bgr_planes;
	split(src, bgr_planes);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值