关于calchist()中的channels参数的说明

本文详细解析了OpenCV中calcHist函数的channels参数,通过实例展示了如何使用channels选择不同通道进行直方图计算。当channels[0]=0时,表示取图像的第一个通道;channels[0]=1表示取第二个通道,依此类推。设置channels数组可以选取多个通道进行统计。同时介绍了掩码、直方图维度、直方图大小、统计范围、均匀性和累加性等参数的作用。

 OpenCV提供了calcHist函数来计算图像直方图。

         其中C++的函数原型如下:void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, OutputArray
hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=
false );

          void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, SparseMat&
hist, int dims, const int* histSize, const float** ranges, bool uniform=true, bool accumulate=
false );

### 使用 `calcHist` 函数计算直方图 在 C++ 中使用 OpenCV 的 `cv::calcHist()` 函数可以方便地计算图像的直方图。此函数用于分析图像中像素强度分布的情况,对于颜色分析、纹理识别等领域非常有用。 #### 参数说明 `cv::calcHist()` 接受多个参数来配置直方图的计算方式: - **images**: 输入图像数组,通常是一个包含单个输入图像的向量。 - **channels**: 要使用的通道列表;新版本中的常用形式是 std::vector<int> 或 int[] 数组。 - **mask**: 可选操作掩码,如果有一个非零掩码,则仅考虑该区域内的像素。 - **histSize**: 直方图大小,通常是表示 bin 计数的标准数组或 vector。 - **ranges**: 像素值范围数组,通常为 `[0, 256]` 对于灰度图像。 - **accumulate**: 积累标志;如果设置为 true,则直方图不会被清零而是累积到现有内容上,默认情况下应设为 false。 下面给出一个简单的例子展示如何利用这些参数创建并显示一幅图像的颜色直方图[^1]。 ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat image = imread("path_to_image.jpg"); if (image.empty()) return -1; /// Separate the image in 3 places ( B, G and R ) vector<Mat> bgr_planes; split(image, bgr_planes); /// Establish the number of bins int histSize = 256; /// Set the ranges ( for B,G,R) ) float range[] = { 0, 256 } ; const float* histRange = { range }; bool uniform = true; bool accumulate = false; Mat b_hist, g_hist, r_hist; /// Compute the histograms: calcHist( &bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate ); calcHist( &bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate ); calcHist( &bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate ); // ... 绘制直方图 ... } ``` 这段代码展示了如何分离彩色图片的不同色彩平面,并分别为每个色彩分量计算其对应的直方图数据。注意这里并没有实现绘制部分,实际应用时可以根据需求进一步处理得到的结果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值