Opencv(C++)学习之cv::calcHist 任意bin数量进行直方图计算

OpenCV直方图与模板匹配实战技巧 直方图作为图像处理的核心分析工具,通过统计像素值分布揭示图像特征。其原理是将像素值范围划分为多个区间(bins),统计各区间内像素出现频率。在OpenCV中,calcHist函数支持多维度直方图计算,配合掩码操作可实现局部特征分析。直方图归一化(NORM_L1/L2/MINMAX)和比较方法(CORREL/CHISQR)为图像匹配、分类提供量化依据。工程实践中,直方图均衡化(equalizeHist)和匹配技术广泛应用于图像增强、色彩校正等场景。结合模板匹配(matchTemplate)和多尺度处理,可构建 阅读详情

**背景:**当前网上常见的直方图使用方法都是默认使用256的范围,而对于使用特定范围的直方图方法讲的不够清楚。仔细研究后总结如下:

1、常见使用方法,直接对灰度图按256个Bin进行计算。

Mat mHistUn;
int channels[1] = { 0 };
{
    bool uniform = true;//使用标准方法-也就是每个bin长度为1
    int histSize[1] = { 256 };
    float range[2] = { 0, 255 };
    const float* ranges[] = { range }; // 指定单个bin的取值范围

    cv::calcHist(&src, 1, channels, cv::Mat(), mHistUn, 1, histSize, ranges, uniform);
}

2、使用128个Bin进行计算

Mat mHist;
int channels[1] = { 0 };
{
    bool uniform = false;
    int histSize[1] = { 128 };
    float range[129] = { 0 };
    for (size_t i = 0, j = 0; i < 129; i++, j += 2)
        range[i] = j;
    const float* ranges[] = { range }; // 指定单个bin的取值范围

    cv::calcHist(&src, 1, channels, cv::Mat(), mHist, 1, histSize, ranges, uniform);
}

在该方法中,channels为0 ,表示单通道。先将uniform 标志位置为false,表示单个bin不再使用默认的距离1。
再构建每个bin的取值范围ranges,这里bin的宽度按2进行配置 ,那么所有的bin就是[0,2],[2,4],[4,6]…[254,255],总共128个bin。
其中需要注意的是,128个bin,但ranges的大小是129.这和opencv对这块的数据处理相关。

3、观察效果

void showCvHist(Mat srchist, int histSize)
{
    int hist_w = 511;
    int hist_h = 400;
    int bin_w = cvRound((double)hist_w / histSize);
    Mat histImage(hist_h, hist_w, CV_8UC1, Scalar(0, 0, 0));
    Mat hist = srchist.clone();
    normalize(hist, hist, 0, hist_h, NORM_MINMAX, -1, Mat());

    for (int i = 1; i < histSize; i++)
    {
        line(histImage, Point(bin_w * (i - 1), hist_h - cvRound(hist.at<float>(i - 1))),
            Point(bin_w * i, hist_h - cvRound(hist.at<float>(i))),
            Scalar(255, 0, 0), 2, 8, 0);
    }
    imshow("tt", histImage);
    cv::waitKey(0);
}

使用该函数对结果进行显示
256方法:
256bin的直方图
128的方法
128bin的直方图

可以看到,直方图的趋势基本类似。我们再看下直方图统计的具体数据。可以看到,在128bin方法中,每个数据正好对应256方法中2个数据之和。说明bin宽度为2正好生效。
256bin与128bin的数据对比1
4、一点统计的疑问:数据的最尾端,[254,255]合并成[127]时,数据存在3000的差异,不知从何引入的。
有知道的朋友可以帮忙看下

256bin与128bin的数据对比2

OpenCV直方图计算函数calcHist的使用 例如,如果一个图像的直方图集中在较暗的色调上,说明图像整体偏暗;第二个图像数组images[1]的通道编号紧接着第一个数组的通道编号之后,从images[0].channels()开始,直到images[0].channels() + images[1].channels()-1。第二个图像数组images[1]的通道编号紧接着第一个数组的通道编号之后,从images[0].channels()开始,直到images[0].channels() + images[1].channels()-1。 阅读详情

相关推荐

cv::calcHist()

函数作用 计算灰度图像的灰度分布直方图 函数原型 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 accu

qq_45279570的博客 915

OpenCV 直方图统计函数 cv::calcHist算是彻底弄明白了

在代码中,计算两个通道,通过参数histSize指定,每个通道都分成8个分区,因此可能有64种组合结果,因此二维直方图的大小为8*8的矩阵。在图像中(3,10)这个组合的数据只有一个,对应的分区编号是(3,2),因此二维直方图中(3,2)位置的数据值为1,即上图中绿色标记的位置。在图像中 (3, 11)这个组合的数据有两个, (3, 11)对应的分区编号是(3,3),因此上图中的红色标记的位置的统计值为2。此时需要将dims参数设置为2。

lijing_lj928的专栏 3284

【OpenCV4】图像直方图生成函数calcHist()使用详解

calcHist() 函数有 3 个构造函数 第一个构造函数: calcHist() [1/3] 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 accumu

AItrust的博客 2391

43_OpenCV直方图基本操作

OpenCv中直方图基本操作; 计算直方图; 归一化/阈值化/找出显著区间; 比较两个直方图

sinat_41752325的博客 1206

基于C++与OpenCV实现图像检索系统:从颜色直方图到工程实践

图像检索是计算机视觉领域的核心技术,其核心原理在于将图像内容转化为可计算的数学特征向量,并通过相似度度量进行高效比对。颜色直方图作为一种经典的特征表示方法,通过统计图像在HSV等色彩空间中的颜色分布,生成稳定的特征向量,具有计算高效、对几何变换鲁棒性强的技术价值。在工程实践中,结合巴氏距离等相似度度量算法,可以构建高效的检索系统,广泛应用于以图搜图、相册管理和内容去重等场景。本文聚焦于使用C++和OpenCV从零实现一个基于颜色特征的图像检索引擎,深入探讨了特征提取、相似度计算与系统架构等关键环节,为理解更

weixin_34023982的博客 386

OpenCV C++图像增强实战:直方图均衡化、空间滤波与伽马校正原理与实现

图像增强是计算机视觉和图像处理领域的基础技术,其核心原理是通过调整图像的像素值分布,改善图像的视觉质量或使其更适合后续算法分析。从技术实现上看,主要分为空间域和频率域两大类方法,其中空间域增强因其计算高效、直观易懂,在工程实践中应用最为广泛。其技术价值在于能够有效提升图像中关键信息的可辨识度,例如增强边缘细节、改善对比度、抑制噪声等,从而为人眼观察或下游的机器学习模型提供更优质的输入。典型的应用场景包括医学影像的病灶增强、自动驾驶中的恶劣天气图像清晰化、安防监控中的人脸识别预处理等。本文聚焦于使用OpenC

weixin_34296641的博客 347

灰度图像处理与OpenCV直方图均衡化实战

灰度图像处理是计算机视觉的基础技术,通过单通道像素值记录亮度信息,广泛应用于医学影像、工业检测等领域。其核心原理包括灰度变换和直方图分析,其中直方图均衡化能有效增强图像对比度。OpenCV作为主流计算机视觉库,提供了calcHist等高效函数实现。工程实践中,结合伽马校正和CLAHE算法可以优化处理效果。本文通过实际代码示例,详细解析灰度图像处理的关键技术,包括直方图均衡化实现、查找表优化等性能提升技巧,帮助开发者掌握这一基础而重要的图像处理能力。

diankui6178的博客 359

VC++水果识别系统开发:从OpenCV图像处理到机器学习算法集成

计算机视觉作为人工智能的重要分支,其核心原理是通过算法让机器“看懂”图像内容。在技术实现层面,图像处理与特征提取是基础环节,涉及颜色空间转换、轮廓分析等关键技术。这些技术的工程价值在于能够将理论算法转化为实际应用,例如在工业检测、智能零售等场景中实现自动化识别。本文聚焦于一个具体的实践案例:使用VC++开发环境,结合OpenCV库实现综合水果识别系统。该系统整合了传统机器学习算法与深度学习模型,并采用多线程架构处理实时视频流,展示了如何将计算机视觉技术落地为完整的Windows桌面应用。通过分享开发过程中的

weixin_34248487的博客 422

Matplotlib直方图实战:数据分布分析与图像像素诊断

直方图是理解数据分布最基础且关键的统计可视化工具,其本质是对连续变量的概率密度函数(PDF)进行离散化估计。掌握分箱策略(如Freedman-Diaconis规则)、密度与频数Y轴含义、对数刻度应用及多图对比方法,可显著提升异常检测、图像质量评估和算法预处理效果。在计算机视觉中,直方图支撑像素强度分析、CT/MRI影像组织分割与工业质检;在数据分析中,它是分布偏斜判断、阈值设定和模型输入诊断的核心依据。本文聚焦Histograms in Matplotlib这一高频技术实践,覆盖从新手入门到医疗影像、遥感、

weixin_34192816的博客 497

从原理到实战:图像相似度计算的几种核心算法解析

本文深入解析图像相似度计算的核心算法,包括TM标准平方差、TM相关系数、aHash和pHash等,探讨其原理、应用场景及实战技巧。通过电商去重、内容检索等案例,展示算法组合策略与性能优化方法,帮助开发者高效实现图像匹配与检索。

weixin_33671935的博客 393

AI视频转场实战:基于OpenCV与FFmpeg的自动化剪辑系统实现

视频转场是连接不同场景、提升叙事流畅度的关键技术,其核心在于通过算法实现视觉内容的平滑过渡。传统手动剪辑依赖经验且耗时,而AI视频转场技术则通过计算机视觉和深度学习模型,自动分析视频内容、识别最佳剪辑点并生成匹配的转场效果,实现了从自动化到智能化的跨越。这项技术的价值在于大幅提升创作效率,降低专业剪辑门槛,并能根据视频语义(如运动方向、色彩)生成更契合的“超丝滑”体验。其应用场景广泛,尤其适用于旅行Vlog、日常记录、产品展示等需要快速、高质量内容生产的领域。本文将以实战为导向,深入解析如何利用OpenCV

weixin_30566111的博客 304

Python图像差异检测:像素比对、SSIM与直方图三重验证

图像差异检测是计算机视觉中的基础任务,本质是量化两张图像在像素值、结构信息和色彩分布三个维度的偏离程度。其核心原理涵盖逐像素绝对差值计算、基于人类视觉系统建模的结构相似性(SSIM)评估,以及全局统计视角下的直方图距离分析。该技术具备高可复现性与工程鲁棒性,广泛应用于UI自动化测试、医疗影像比对、电商图片版本管理及AIGC生成结果验证等场景。本文聚焦Python生态下OpenCV、NumPy与scikit-image的协同实践,深入解析容差设定、尺寸归一化、色彩空间转换等易被忽略的关键细节,并提供可直接集成

weixin_30797199的博客 367

OpenCV-Python实战(7)——直方图详解

直方图是一种强大的技术,可以用于更好地理解图像内容。例如,许多相机在拍照时会实时显示正在捕获的场景的直方图,以调整相机拍摄的一些参数(例如曝光时间、亮度或对比度等)。在本文中,我们将学习直方图的相关概念,以及如何创建直方图。

盼小辉丶的博客 2万+

图像特征提取基础:OpenCV颜色纹理边缘角点实战

在计算机视觉与图像处理任务中,原始像素矩阵数据量巨大且对光照、形变敏感,直接输入模型难以获得稳定效果。特征提取作为连接像素与语义的桥梁,通过颜色直方图、LBP、GLCM、Sobel、Canny、Harris角点等算子,将图像转化为可量化、可比较的特征向量,是图像分类、目标检测和工业缺陷检测的基础环节。以OpenCV、NumPy和Matplotlib作为实验环境,系统梳理基础图像特征的概念、分类与工程实现,涵盖颜色、纹理、边缘、角点特征的提取代码、参数含义与调试方法,并结合小样本工业检测、图像检索等真实场景,

weixin_34293911的博客 563

传统CV实战:基于颜色直方图与网格特征的麻将牌SVM识别

在计算机视觉领域,目标检测与分类是基础且核心的任务。其原理在于从图像中提取有区分度的特征,并利用分类器进行模式匹配。传统方法如特征工程结合支持向量机(SVM),在特定场景下具有模型轻量、可解释性强、计算效率高的技术价值,尤其适用于数据有限或对实时性要求高的嵌入式应用。本文以麻将牌识别为具体场景,深入解析如何运用颜色直方图捕捉全局色彩分布,并结合自定义的25维像素占比特征(一种网格统计特征)来描述牌面纹理与结构,最终通过SVM模型实现高精度分类,为理解经典图像处理流程与机器学习落地提供了完整实践路径。

weixin_34319374的博客 440

OpenCV人脸检测与相似度比较实战:从Haar到直方图

计算机视觉中,人脸检测与相似度比较是高频应用的基础。OpenCV作为轻量级开源库,提供了从传统特征到深度学习模型的完整方案。本文从图像特征提取原理出发,解析Haar Cascade级联分类器如何通过矩形特征快速定位人脸,并探讨基于HSV颜色直方图进行相似度比较的工程实践。通过调整detectMultiScale参数、对比直方图相关度与巴氏距离,读者可理解阈值选择对结果的影响。该技术无需GPU即可运行,适用于本地照片管理、实时监控标注等场景。最后,文章自然收敛到使用OpenCV实现人脸检测与相似度比较的完整代

weixin_42552637的博客 230

51c视觉~CV~合集3

基于深度学习的方法在某些工业产品的表面缺陷识别和分类方面表现出优异的性能, 然而大多数工业产品缺陷样本稀缺, 而且特征差异大, 导致这类需要大量缺陷样本训练的检测方法难以适用. 提出一种基于重构网络的无监督缺陷检测算法, 仅使用容易大量获得的无缺陷样本数据实现对异常缺陷的检测. 提出的算法包括两个阶段: 图像重构网络训练阶段和表面缺陷区域检测阶段. 训练阶段通过一种轻量化结构的全卷积自编码器设计重构网络, 仅使用少量正常样本进行训练, 使得重构网络能够生成无缺陷重构图像, 进一步提出一种结合结构性损失和L1

whaosoft~aiotの开发板商城 3054

yersinia -G打不开图形化界面解决方案(曲线救国,实操可行)

附Kali 2021 VMware懒人版,已完成汉化,更新源,并已经安装yersinia。ping 114.114.114.114也不通,接着ifconfig发现 IP地址有的,然后手动配置了IP地址,发现还是Ping不通114.11.4.114.114,然后输入。更新源后,报错源无法解析,同时ping www.baidu.com也不通,那可能是DNS存在问题,更新一下DNS服务器。百度找了很久,有个回答比较接近,但一一尝试了几遍,还是无解,解决不了呀!•(2)Yersinia编译的时候,要选择gtk。

weilandeyongheng的专栏 4169

Python图像处理实战:从OpenCV基础到质量评估系统开发

数字图像处理作为计算机视觉的核心技术,通过对像素矩阵的数学运算实现图像增强、分析和信息提取。其基本原理包括RGB色彩模型、像素操作和空间变换等算法,在医疗影像、安防监控、自动驾驶等领域具有重要技术价值。OpenCV作为最流行的图像处理库,提供了丰富的函数接口支持滤波、边缘检测、直方图均衡化等常见操作。在实际工程应用中,图像质量评估系统能够自动检测模糊、噪声、曝光等问题,为图像优化提供量化指标和改进建议。本文通过完整的项目实战,演示了如何使用Python和OpenCV构建实用的图像处理解决方案,涵盖环境配置、

weixin_30932215的博客 379

泛微E10 eBuilder低代码平台避坑指南:新手最容易犯的5个错误及解决方案

本文针对泛微E10 eBuilder低代码平台的新手开发者,总结了5个最常见错误及解决方案,包括表单联动配置、流程设计权限、动作流时序、数据加工类型转换和权限管理过度配置等问题。通过实战经验和代码示例,帮助开发者避开常见陷阱,提升开发效率。

weixin_30919429的博客 540

【SAP-MDG】工作流任务配置实战:从基础配置到代理分配详解

本文详细解析了SAP MDG工作流任务配置的全流程,从基础配置到代理分配的关键操作。通过实战案例和最佳实践,帮助用户掌握Configure Workflow Tasks的核心技巧,包括环境检查、代理分配、SWDD事务码使用及常见问题排查,提升主数据管理效率。

weixin_33738555的博客 248
上一篇: Opencv(C++)学习之 一种用opencv实现高斯曲线拟合的方法
下一篇: Opencv(C++)学习 window环境下opencv4的一次告警消除探索
沉木渡香
博客等级 码龄14年 652粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

沉木渡香

感谢鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值