当前位置: 首页 > news >正文

【OpenCV + VS】直方图与模糊操作

在图像处理中,直方图是分析图像亮度、色彩分布的核心工具,而模糊操作则是降噪、平滑图像的基础手段。这篇教程将结合完整可运行的OpenCV代码,详细拆解1D直方图绘制、2D直方图分析、直方图均衡化以及三种常用模糊算法的原理与实现,从代码逐行解读到实际应用场景。
在这里插入图片描述

一、为什么这些操作很重要?

明确每个功能的核心作用:

  • 直方图(1D/2D):将图像像素值的分布可视化,1D直方图聚焦单通道(如BGR)的亮度分布,2D直方图可分析色彩组合(如HSV的色相-饱和度),常用于图像分割、曝光调整等场景。
  • 直方图均衡化:通过调整像素分布,增强图像对比度,解决暗部细节不清晰、图像偏暗等问题,是图像增强的基础方法。
  • 模糊操作:通过卷积运算降低图像噪声,平滑细节。不同模糊算法的区别在于“保留边缘能力”和“降噪效果”的平衡——普通模糊降噪强但边缘模糊,双边模糊能在降噪的同时保留边缘。

二、代码结构

代码包含6个核心功能函数+1个主函数:

// 头文件与命名空间
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;// 1. 1D三通道直方图绘制
void Histogram_demo(Mat& image);
// 2. 2D(HSV)直方图绘制
void Histogram_2d_demo(Mat& image);
// 3. 直方图均衡化(灰度图)
void histogram_eq_demo(Mat& image);
// 4. 普通均值模糊
void blur_demo(Mat& image);
// 5. 高斯模糊
void gaussian_blur_demo(Mat& image);
// 6. 双边模糊
void bifilter_demo(Mat& image);// 主函数:读取图像+调用所有功能
int main() { ... }

三、逐函数拆解:原理+代码+细节

(一)1D直方图:可视化三通道像素分布(Histogram_demo)

核心作用

将BGR图像的蓝、绿、红三个通道,分别统计0~255像素值的出现次数,用三条曲线可视化,直观看到图像的色彩分布(如红色多则红色曲线偏高)。

代码逐行解读
void Histogram_demo(Mat& image) {// 1. 三通道分离:将BGR图像拆成3个单通道图像vector<Mat> bgr_plane;  // 存储三个单通道的容器split(image, bgr_plane); // split(输入图像, 输出容器):bgr_plane[0]=B通道,[1]=G通道,[2]=R通道// 2. 直方图计算参数设置(关键!)const int channels[] = { 0 };  // 计算单通道直方图,通道索引为0(每个单通道独立计算)const int bins[] = { 256 };    // 分箱数:0~255共256个像素值,每个值对应一个"箱"float hranges[] = { 0, 255 };  // 像素值统计范围:只统计0到255(8位图像的全部范围)const float* ranges[] = { hranges };  // 指向范围数组的指针(calcHist要求参数格式)// 3. 存储三个通道的直方图结果(Mat类型,1行256列,float型)Mat b_hist, g_hist, r_hist;// 4. 计算直方图:calcHist是OpenCV核心函数// 参数说明:输入图像指针、图像数量、通道索引、掩码(Mat()表示无掩码)、输出直方图、//          直方图维度(1D)、分箱数、像素范围、是否均匀分布、是否累积calcHist(&bgr_plane[0], 1, channels, Mat(), b_hist, 1, bins, ranges);calcHist(&bgr_plane[1], 1, channels, Mat(), g_hist, 1, bins, ranges);calcHist(&bgr_plane[2], 1, channels, Mat(), r_hist, 1, bins, ranges);// 5. 准备直方图绘制的空白图像int hist_w = 512;  // 直方图图像宽度(像素)int hist_h = 400;  
http://www.dtcms.com/a/606505.html

相关文章:

  • 代码随想录 435.无重叠区间
  • 【AVL树与红黑树】:告别“瘸腿”树,体验平衡的艺术
  • 智慧团建网站入口官网有什么做ppt的网站吗
  • 机器人“小脑”萎缩,何谈“大脑”智慧?六维力/关节力传感器才是“救命稻草”
  • 基于SpringBoot的图书馆管理系统的设计与实现
  • SpringCloud快速通关(中)
  • 性价比高的时序数据库哪个专业
  • 邵阳高端网站建设做响应式网站的物流
  • 网站定制开发哪家厉害网站登录界面源码
  • 自己电脑做网站服务器违法吗上海网站建设最好的公司排名
  • C++-vector-back子函数和std::move函数详细介绍
  • 07.指针
  • 【gas优化】2.9 使用sstore2或sstore3存储大量数据
  • 来宾北京网站建设网站浏览思路
  • 网站建设模式化的体现企业个人邮箱怎么注册
  • 分布式部署
  • 保障电网安全,赋能绿色能源:AM5SE-PV系列主从机防逆流保护装置在江西丰城曲江煤炭开发公司5.8MW分布式光伏项目的关键角色
  • C/C++ Linux网络编程3 - Socket编程与TCP服务器客户端
  • 镇江大港南站wordpress 新闻 通知
  • 【ZeroRange WebRTC】RFC 5389:STUN 协议规范(中文整理与译注)
  • 苏州网站制作及推广二手闲置平台网站怎么做
  • Unity零碎物体合并为一个整体mesh
  • 做响应式网站图片需要做几版在哪个网站找学做包子
  • 国内大型php网站建设商务网站开发背景
  • HarmonyOS开发-ArkWeb开发指导
  • kotlin:if、when语句介绍
  • 扩展函数练习题
  • Java后端常用技术选型 |(一)数据库篇
  • 婚纱摄影网站应该如何做优化室内装修设计软件下载
  • 从零开始写算法——二分-寻找旋转排序数组中的最小值