图像处理之图像灰度化

目录

1 图像灰度化简介

2 图像灰度化处理方法

2.1 均值灰度化

2.2 经典灰度化

2.3 Photoshop灰度化

2.4 C语言代码实现

3 演示Demo

3.1 开发环境

3.2 功能介绍

3.3 下载地址

参考


1 图像灰度化简介

        对于24位的RGB图像而言,每个像素用3字节表示,分别对应R、G、B三个分量。如果R、G、B三个分量的值不相同,那么表现出来就是彩色图像;如果三者的值相同,那么表现出来就是灰度图像。而一张彩色图像转换为灰度图像,就叫做图像灰度化。

        灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255,当灰度为255的时候,表示最亮(纯白);当灰度为0的时候,表示最暗(纯黑)。

        灰度化的好处是:相较于彩色图像灰度图像占内存更小,运行速度更快;灰度图像后可以在视觉上增加对比,突出目标区域。

2 图像灰度化处理方法

        图像灰度化处理有三种常用方法:均值灰度化、经典灰度化、Photoshop灰度化。

2.1 均值灰度化

        均值灰度化,每个像素的灰度值为 R、G、B 分量的均值,也叫作明度灰度化。

        Gray = ( R + G + B )/ 3

2.2 经典灰度化

        经典灰度化,结合人眼对颜色的感应度,得到的一组比较适合的参数。

        Gray = 0.299*R + 0.587*G + 0.114*B

2.3 Photoshop灰度化

        Photoshop灰度化,即PS中的“去色“命令,是一种基于最大值和最小值的灰度化计算。

        Gray =( max(R,G,B) + min(R,G,B) )/ 2

2.4 C语言代码实现

/*************************************************
功    能:图像灰度化
参    数:srcData -  [输入/输出] 原始图像,格式为32位BGRA格式,执行后修为结果图像width    - [输入] 原始图像宽度height   - [输入] 原始图像高度stride   - [输入] 原始图像的Stride(也就是行字节数width*4)mode     - [输入] 0-均值灰度化,1-经典灰度化,2-PS灰度化
返    回:0-成功,其他-失败.
*************************************************/
int gray(unsigned char *srcData, int width, int height, int stride, int mode)
{int ret = 0;int i, j, gray, offset;offset = stride - width * 4;unsigned char* pSrc = srcData;switch (mode){case 0://mean gray methodfor (j = 0; j < height; j++){for (i = 0; i < width; i++){gray = (pSrc[0] + pSrc[1] + pSrc[2]) / 3;pSrc[0] = gray;pSrc[1] = gray;pSrc[2] = gray;pSrc += 4;}pSrc += offset;}break;case 1://classic gray methodfor (j = 0; j < height; j++){for (i = 0; i < width; i++){gray = (299 * pSrc[2] + 587 * pSrc[1] + 114 * pSrc[0]) / 1000;pSrc[0] = gray;pSrc[1] = gray;pSrc[2] = gray;pSrc += 4;}pSrc += offset;}break;case 2://photoshop gray methodfor (j = 0; j < height; j++){for (i = 0; i < width; i++){gray = (MAX2(pSrc[0], MAX2(pSrc[1], pSrc[2])) + MIN2(pSrc[0], MIN2(pSrc[1], pSrc[2]))) / 2;pSrc[0] = gray;pSrc[1] = gray;pSrc[2] = gray;pSrc += 4;}pSrc += offset;}break;default:break;}return ret;
};

3 演示Demo

3.1 开发环境

  • Windows 10 Pro x64

  • Visual Studio 2015

3.2 功能介绍

        演示程序主界面如下图所示,具有图像读取、显示、保存、显示RGBA值、HSV调整、提取YUV分量、灰度化等功能。

原图

经典灰度化

3.3 下载地址

        开发环境:

  • Windows 10 pro x64

  • Visual Studio 2015

        下载地址:图像处理之图像灰度化Demo

参考

        图像视频滤镜与人像美颜美妆算法详解. 胡耀武、谭娟、李云夕. 电子工业出版社、2020-07

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的GROUP BY与COUNT()函数的使用问题

在MySQL中&#xff0c;GROUP BY和 COUNT()函数是数据聚合查询中非常重要的工具。正确使用它们可以有效地统计和分析数据。然而&#xff0c;不当的使用可能会导致查询结果不准确或性能低下。本文将详细讨论 GROUP BY和 COUNT()函数的使用方法及常见问题&#xff0c;并提供相应的…

【课题推荐】基于t分布的非高斯滤波框架在水下自主导航中的应用研究

水下自主导航系统在海洋探测、环境监测及水下作业等领域具有广泛的应用。然而&#xff0c;复杂的水下环境常常导致传感器输出出现野值噪声&#xff0c;这些噪声会严重影响导航信息融合算法的精度&#xff0c;甚至导致系统发散。传统的卡尔曼滤波算法基于高斯噪声假设&#xff0…

知识库管理系统为企业赋能与数字化转型的关键解决方案分析

内容概要 在当今快速发展的商业环境中&#xff0c;知识库管理系统成为企业进行数字化转型的重要支撑工具。这类系统不仅可以帮助企业高效整合和管理其知识资产&#xff0c;还能提升信息共享与沟通的效率。通过科学的知识管理策略&#xff0c;企业可以在动态市场中实现精益管理…

HTML(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、前言二、HTML基础2.1 什么是HTML?2.2 认识HTML标签2.2.1 HTML标签当中的基本结构2.2.2 标签层次结构 2.3 HTML常见标签2.3.1 标题标签2.3.2 段落标签2.3.3…

线性代数复习笔记

1. 课程学习 1.1 3Blue1Brown 线性代数 2. 基本术语 eigenvector&#xff08;特征向量&#xff09;&#xff1a;线性变换中方向保持不变的向量 可以视作3D旋转矩阵形成的旋转的轴

vue入门到实战 二

目录 2.1 计算属性computed 2.1.1什么是计算属性 2.1.2 只有getter方法的计算属性 2.1.3 定义有getter和setter方法的计算属性 2.1.4 计算属性和methods的对比 2.2 监听器属性watch 2.2.1 watch属性的用法 2.2.2 computed属性和watch属性的对比 2.1 计算属性computed…

Python从0到100(八十六):神经网络-ShuffleNet通道混合轻量级网络的深入介绍

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

Baklib赋能企业实现高效数字化内容管理提升竞争力

内容概要 在数字经济的浪潮下&#xff0c;企业面临着前所未有的机遇与挑战。随着信息技术的迅猛发展&#xff0c;各行业都在加速推进数字化转型&#xff0c;以保持竞争力。在这个过程中&#xff0c;数字化内容管理成为不可或缺的一环。高效的内容管理不仅能够优化内部流程&…

springboot中路径默认配置与重定向/转发所存在的域对象

Spring Boot 是一种简化 Spring 应用开发的框架&#xff0c;它提供了多种默认配置和方便的开发特性。在 Web 开发中&#xff0c;路径配置和请求的重定向/转发是常见操作。本文将详细介绍 Spring Boot 中的路径默认配置&#xff0c;并解释重定向和转发过程中存在的域对象。 一、…

六十分之三十七——一转眼、时光飞逝

一、目标 明确可落地&#xff0c;对于自身执行完成需要一定的努力才可以完成的 1.第三版分组、激励、立体化权限、智能设备、AIPPT做课 2.8本书 3.得到&#xff1a;头条、吴军来信2、卓克科技参考3 4.总结思考 二、计划 科学规律的&#xff0c;要结合番茄工作法、快速阅读、…

实验十 Servlet(一)

实验十 Servlet(一) 【实验目的】 1&#xff0e;了解Servlet运行原理 2&#xff0e;掌握Servlet实现方式 【实验内容】 1、参考课堂例子&#xff0c;客户端通过login.jsp发出登录请求&#xff0c;请求提交到loginServlet处理。如果用户名和密码相同则视为登录成功&#xff0c…

基于springboot+vue的哈利波特书影音互动科普网站

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【python】四帧差法实现运动目标检测

四帧差法是一种运动目标检测技术&#xff0c;它通过比较连续四帧图像之间的差异来检测运动物体。这种方法可以在一定的程度上提高检测的准确性。 目录 1 方案 2 实践 ① 代码 ② 效果图 1 方案 具体的步骤如下&#xff1a; ① 读取视频流&#xff1a;使用cv2.VideoCapture…

问题修复记录:Xinference部署 Embedding Model 服务偶发超时

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

数据结构与算法之栈: LeetCode 641. 设计循环双端队列 (Ts版)

设计循环双端队列 https://leetcode.cn/problems/design-circular-deque/description/ 描述 设计实现双端队列。 实现 MyCircularDeque 类: MyCircularDeque(int k) &#xff1a;构造函数,双端队列最大为 k 。boolean insertFront()&#xff1a;将一个元素添加到双端队列头部…

每日一题——用两个栈实现队列

用两个栈实现队列 题目描述数据范围示例 代码实现1. 代码思路push 操作&#xff1a;pop 操作&#xff1a; 2. 代码实现3. 代码解析4. 时间复杂度与空间复杂度 总结 题目描述 用两个栈来实现一个队列&#xff0c;使用 n 个元素来完成 n 次在队列尾部插入整数(push)和 n 次在队列…

自然语言处理(NLP)入门:基础概念与应用场景

什么是自然语言处理&#xff08;NLP&#xff09;&#xff1f; 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是人工智能&#xff08;AI&#xff09;的一个重要分支&#xff0c;研究如何让计算机理解、生成、分析和与人类语言进行交互。换句话说&…

Chapter2 Amplifiers, Source followers Cascodes

Chapter2 Amplifiers, Source followers & Cascodes MOS单管根据输入输出, 可分为CS放大器, source follower和cascode 三种结构. Single-transistor amplifiers 这一章学习模拟电路基本单元-单管放大器 单管运放由Common-Source加上DC电流源组成. Avgm*Rds, gm和rds和…

Linux系统上安装与配置 MySQL( CentOS 7 )

目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …

LeetCode 344: 反转字符串

LeetCode 344: 反转字符串 - C语言题解 这道题的目标是反转一个字符数组&#xff08;字符串&#xff09;。我们将通过双指针法来实现这一功能。 代码实现 #include <stdio.h>void reverseString(char* s, int sSize) {int left 0, right sSize - 1; // 定义左右指针…