图像处理之图像灰度化

server/2025/2/1 10:29:44/

目录

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.ppmy.cn/server/164044.html

相关文章

宇宙大爆炸是什么意思

根据宇宙大爆炸学说&#xff0c;宇宙间的一切都在彼此远离&#xff0c;而且距离越远&#xff0c;远离的速度越快。我们只能在地球上观察这种现象&#xff0c;而我们观察到的速度符合如下公式&#xff0c;其中 为哈勃常数&#xff0c; 为距离&#xff0c; 为速度&#xff08;…

spring mvc 创建restapi 笔记

RestController RequestMapping("/spittles") public class SpittleController {// 示例&#xff1a;使用 RequestBody 接收 JSON 并自动转换为 Spittle 对象PostMappingpublic Spittle saveSpittle(RequestBody Spittle spittle) {// 此时 Spring 已经把请求体中的 …

【JAVA实战】如何使用 Apache POI 在 Java 中写入 Excel 文件

大家好&#xff01;&#x1f31f; 在这篇文章中&#xff0c;我们将带你深入学习如何使用 Apache POI 在 Java 中编写 Excel 文件的技巧&#xff01;&#x1f4ca;&#x1f4da; 如果你是 Java 开发者&#xff0c;或者正在探索如何处理 Excel 文件的数据&#xff0c;那么这篇文章…

【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)

羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…

MySQL注入中load_file()函数的使用

前言 在Msql注入中&#xff0c;load_file()函数在获得webshell以及提权过程中起着十分重要的作用&#xff0c;常被用来读取各种配置文件 而load_file函数只有在满足两个条件的情况下才可以使用&#xff1a; 文件权限&#xff1a;chmod ax pathtofile 文件大小&#xff1a;必须…

python 语音识别

目录 一、语音识别 二、代码实践 2.1 使用vosk三方库 2.2 使用SpeechRecognition 2.3 使用Whisper 一、语音识别 今天识别了别人做的这个app,觉得虽然是个日记app 但是用来学英语也挺好的,能进行语音识别,然后矫正语法,自己说的时候 ,实在不知道怎么说可以先乱说,然…

为大模型提供webui界面的利器:Open WebUI 完全本地离线部署deepseek r1

为大模型提供webui界面的利器&#xff1a;Open WebUI Open WebUI的官网&#xff1a;&#x1f3e1; Home | Open WebUI 开源代码&#xff1a;WeTab 新标签页 Open WebUI是一个可扩展、功能丰富、用户友好的自托管AI平台&#xff0c;旨在完全离线运行。它支持各种LLM运行程序&am…

Java小白入门教程:三种注释+快捷方式

目录 一、单行注释 快捷方式&#xff1a;选中要注释的内容,按键盘的 Ctrl / 二、多行注释 快捷方式&#xff1a;选中要注释的内容,按键盘的 Ctrl Shift / 三、文档注释 快捷方式&#xff1a;在类名或者方法名上输入/**回车 一、单行注释 // 单行注释的内容 快捷方式&…