OpenCV【4】---calcHist 计算图像的直方图

本文介绍了如何使用OpenCV的calcHist函数计算图像的直方图,包括单通道和三通道图像。直方图是描述图像内容的有效工具,常用于物体检测和相似度检测。calcHist函数的参数和使用方法也在文中详细阐述。
摘要由CSDN通过智能技术生成

1 直方图

  直方图:给出了一幅图像或一组图像中拥有给定数值的像素数量。灰度图图像(单通道)的直方图有256个条目。0号条目给出值为0的像素个数,1号条目给出值为1的像素个数…。当然直方图可以归一化,归一化后的所有条目之和等于1,每一个条目是该特定值像素在图像中所占的比例。大多数情况下,直方图是一个单通道或者三通道的图像。
  直方图能够有效地描述图像的内容。既然能够有效的描述图像的内容,那么将图像化为直方图就能够做内容检测的工作。比如物体检测,相似度检测等。

直方图示例

2 calcHist函数

  calcHist函数是用来计算一个图像数组集合的直方图。

  C++函数调用形式:

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, bool accumulate=false)

  Python调用形式:

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) → hist

  C调用形式:

void cvCalcHist(IplImage** image, CvHistogram* hist, int accumulate=0, const CvArr* mask=NULL)

  参数说明:

images — 源矩阵指针(输入图像,可以多张)。 但都应当有同样的深度(depth), 比如CV_8U 或者 CV_32F ,和同样的大小。每张图片可以拥有任意数量的通道。
nimages — 源图像的数量,如一幅图像则为1。
channels — 通道的数量,每个通道都有编号,灰度图为一通道,即channel[1]=0;对应着一维。BGR三通道图像编号为channels[3]={0,1,2};分别对应着第一维,第二维,第三维。
mask — 掩码图像:要对图像处理时,先看看这个像素对应的掩码位是否为屏蔽,如果为屏蔽,就是说该像素不处理(掩码值为0的像素都将被忽略)
hist — 返回的直方图。
dims — 直方图维度。
histSize — 直方图每一维的条目个数的数组,灰度图一维有256个条目。
ranges — 每一维的像素值的范围,传递数组,与维数相对应,灰度图一维像素值范围为0~255。

3 获取直方图代码

3.1 单通道图像直方图

Histogram1D.h
#ifndef HISTOGRAM1D_H
#define HISTOGRAM1D_H

#include <iostream>
#include <QDebug>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>


using namespace cv;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值