python之彩色图像变灰度图像

目录

1、加权平均法:

2、最大值法:

3、分量法:

4、平均值法:


彩色图像转换为灰度图像的过程涉及到图像处理的基本概念和方法。这种转换是通过对彩色图像的三个通道(红、绿、蓝,即RGB)进行特定的计算,从而得到一个代表亮度信息的单通道灰度图像。以下是几种常见的转换方法:

1、加权平均法:

这是最常用的彩色图像灰度化处理方法。原理是将三个分量以不同的权值进行加权平均。公式为:Gray = 0.299R + 0.587G + 0.114B。这个公式考虑了人眼对不同颜色的敏感度,其中绿色对亮度的贡献最大,红色次之,蓝色最少。

import cv2  # 读取彩色图像  
img = cv2.imread('color_image.jpg')  # 将彩色图像转换为灰度图像  
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 显示灰度图像  
cv2.imshow('Gray Image', gray_img)  
cv2.waitKey(0)  
cv2.destroyAllWindows()

import numpy as np  # 读取彩色图像  
img = np.array(cv2.imread('color_image.jpg'))  # 获取图像的高度、宽度和通道数  
height, width, channels = img.shape  # 计算加权平均值作为灰度值  
gray_img = (0.299 * img[:, :, 0] + 0.587 * img[:, :, 1] + 0.114 * img[:, :, 2]) / (0.299 + 0.587 + 0.114)  # 将灰度值限制在0-255范围内  
gray_img = np.clip(gray_img, 0, 255)  # 将灰度值转换为整数  
gray_img = gray_img.astype(np.uint8)  # 显示灰度图像  
cv2.imshow('Gray Image', gray_img)  
cv2.waitKey(0)  
cv2.destroyAllWindows()

2、最大值法:

将彩色图像中的三个分量R、G、B的最大值作为灰度图的灰度值。即:Gray = max(R,G,B)。这种方法简单,但可能会丢失一些细节信息。

import cv2  
import numpy as np  # 读取彩色图像  
img = cv2.imread('color_image.jpg')  # 获取图像的高度、宽度和通道数  
height, width, channels = img.shape  # 创建一个空的灰度图像  
gray_img = np.zeros((height, width), dtype=np.uint8)  # 遍历图像的每个像素  
for i in range(height):  for j in range(width):  # 获取当前像素的RGB值  r, g, b = img[i, j]  # 使用最大值法计算灰度值  gray_value = max(r, g, b)  # 将灰度值赋给灰度图像的当前像素  gray_img[i, j] = gray_value  # 显示灰度图像  
cv2.imshow('Gray Image', gray_img)  
cv2.waitKey(0)  
cv2.destroyAllWindows()

3、分量法:

将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。例如,可以直接使用R、G或B通道的值作为灰度值。

import cv2  # 读取彩色图像  
img = cv2.imread('color_image.jpg')  # 获取图像的高度、宽度和通道数  
height, width, channels = img.shape  # 选择一个通道作为灰度值,这里选择B通道  
gray_img = img[:, :, 0]  # 显示灰度图像  
cv2.imshow('Gray Image', gray_img)  
cv2.waitKey(0)  
cv2.destroyAllWindows()

4、平均值法:

将彩色图像中的三分量的亮度求平均得到一个灰度值。公式为:Gray = (R + G + B) / 3。这种方法简单直观,但可能不如加权平均法效果好。

import cv2  # 读取彩色图像  
img = cv2.imread('color_image.jpg')  # 获取图像的高度、宽度和通道数  
height, width, channels = img.shape  # 计算R、G、B三个通道的平均值作为灰度值  
gray_img = cv2.mean(img)  # 显示灰度图像  
cv2.imshow('Gray Image', gray_img)  
cv2.waitKey(0)  
cv2.destroyAllWindows()

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

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

相关文章

打响指针的第一枪:指针家族

前言 指针其实是我们学习C语言中最难的知识点,很多人在学习指针的时候会被绕晕,包括博主也是,当初百思不得其解,脑袋都要冒烟了,本来打算在学习指针的时候就写一篇博客,但是当初自己的能力还是没有办法去完…

SQL语句整理二--Mysql

文章目录 知识点梳理:1. mysql 中 in 和 exists 区别2. varchar 与 char 的区别 查看表结构:获取当前时间:查看建表语句:修改用户密码:查看所有用户:grant命令:判断当前数据库有多少连接数&…

WPF Icon矢量库 MahApps.Metro.IconPacks

文章目录 前言MahApps.Metro.IconPacksIconPacks.Browser简单使用简单使用案例代码Icon版本个人推荐 Icon自定义版权问题 前言 为了更快的进行开发,我找到了一个WPF的矢量图库。这样我们就不用去网上找别人的矢量库了 MahApps.Metro.IconPacks MahApps.Metro.Icon…

21.Servlet 技术

JavaWeb应用的概念 在Sun的Java Servlet规范中,对Java Web应用作了这样定义:“Java Web应用由一组Servlet、HTML页、类、以及其它可以被绑定的资源构成。它可以在各种供应商提供的实现Servlet规范的 Servlet容器 中运行。” Java Web应用中可以包含如下…

BearPi Std 板从入门到放弃 - 先天神魂篇(9)(RT-Thread DAC->ADC)

简介 RT-Thread DAC->ADC 使用, 就是DAC1输出模拟量, ADC1 读取模拟量转化成电压值, 基于开发板 : Bearpi Std(小熊派标准板)主芯片: STM32L431RCT6串口: Usart1DAC1: PA5, OUT2ADC1: PC2, IN3将板子上的E53 接口, 5 和 6用排线相连, 即实现内部DAC1->ADC1 …

【云原生】华为云踩坑日志(更新于2023.12.10)

1、华为云建议我们把sfs容量型升级到turbo版本,但是CCE产品storageclass sfs-turbo共享存储卷不支持动态绑定,官网文档可以实现动态创建子目录,建议大家直接选择这个,不要踩坑了 2、CCE 涉及到的产品,有的需要查看产品…

树莓派通过网线连接电脑并且设置设置链接wifi

好久没玩过树莓派了,系统进不去了,需要记录一下,之前总觉得自己会了,但是还是需要不断的翻阅资料。 树莓派 配置SD卡开启ssh - 哔哩哔哩 树莓派通过网线连接ssh 直接在sd卡建立一个ssh的文件,不要带任何后戳 ip查…

P2P网络下分布式文件共享场景的测试

P2P网络介绍 P2P是Peer-to-Peer的缩写,“Peer”在英语里有“对等者、伙伴、对端”的意义。因此,从字面意思来看,P2P可以理解为对等网络。国内一些媒体将P2P翻译成“点对点”或者“端对端”,学术界则统一称为对等网络(Peer-to-Pee…

Go和Java实现抽象工厂模式

Go和Java实现抽象工厂模式 本文通过简单数据库操作案例来说明抽象工厂模式的使用,使用Go语言和Java语言实现。 1、抽象工厂模式 抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创 建型模式,它…

深入浅出RPC:选取适合自己的RPC

文章目录 1、RPC概念&&背景1.1、RPC背景 1.2、RPC是什么,什么时候需要用到?2、进程间的通信 - IPC与RPC2.1、什么是IPC2.2、IPC与RPC联系 3、RPC的实现3.1、RPC实现的基本思路3.2、RPC实现的扩展方向 4、RPC的选择 1、RPC概念&&背景 1.…

【 AI 两步实现文本 转 语音】

基于hugging face 中 XTTS-v2 模型做文本转语音,此模型支持17种语言 1.登录hugging face 官网 https://huggingface.curated.co/ 或者 https://hf-mirror.com/models 找到models处下载XTTS-V2 如果你全程可以联网(/huggingface.co)直接步骤…

SpringBoot中使用@Async实现异步调用

SpringBoot中使用Async实现异步调用 什么是异步调用?异步调用对应的是同步调用,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上 一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返…

MVC环境搭建

MVC环境搭建 1.引入依赖 <!-- 集成 spring 框架 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.2.13.RELEASE</version></dependency><!-- 集成 web 框架…

32位MCU极致性价比高速风筒方案特点--【其利天下技术】

近年来&#xff0c;伴随着人们消费升级及现代工业技术水平的提升&#xff0c;电吹风市场已经步入了绿色节能、高效多功能化的发展阶段。人们对电吹风的需求和要求都在不断增加。然而&#xff0c;传统电吹风采用交流电机&#xff0c;使用寿命有限&#xff0c;维护不方便&#xf…

数据可视化---双Y轴折线图比较

内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…

嵌套json 数组结构

{"bills": [{"billNo": "J2302001","printer": "陈美伶","billDate":"2023-04-18 10:05:23","skuQty": 2,"styleQty": 1,"totalQty": 2,"tagPrintDetails": […

FFmpeg零基础学习(五)——Qt 如何调用ffmpeg.exe执行命令

目录 前言正文一、核心代码END、总结的知识与问题 参考 前言 本篇文章讲述如何使用Qt 来调用ffmpeg.exe 执行相关的命令。方法较为简单&#xff0c;但由于也属于ffmpeg学习的一个小知识点&#xff0c;所以&#xff0c;也单独写一篇文章进行总结。 正文 一、核心代码 将ffmp…

BigDecimal中divide方法详解

BigDecimal中divide方法详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一起深入探讨Java中BigDecimal的divide方法&#xff0c;揭开这个…

文件相关工具类Utils(WORD,PDF,PNG)

导读&#xff0c;此工具类中包含以下功能&#xff1a; 1、文件后缀判断 2、图片后缀判断 3、word后缀判断 4、Excel后缀判断 5、PDF后缀判断 6、使用pdfbox将整个pdf转换成图片 7、pdf2word 8、word2PDF 9、向PDF指定页插入图片 10、PDF指定位置覆盖 11、删除文件夹及以下文件&…

【为数据之道学习笔记】5-7五类数据主题联接的应用场景

在数字化转型的背景下&#xff0c;华为的数据消费已经不再局限于传统的报表分析&#xff0c;还要支持用户的自助分析、实时分析&#xff0c;通过数据的关联&#xff0c;支持业务的关联影响分析以及对目标对象做特征识别&#xff0c;进行特定业务范围圈定、差异化管理与决策等。…