图像灰度化处理

article/2025/8/27 7:03:55

文章目录

  • 1. 图像灰度化
  • 2. 图像灰度化处理方法
    • 2.1 最大值法
    • 2.2 平均值法
    • 2.3 加权平均法
  • 3. 图像灰度化处理方法的Python实现
    • 3.1 最大值法
    • 3.2 平均值法
    • 3.3 加权平均法
    • 3.4 最大值法、平均值法和加权平均法的比较
    • 3.5 opencv-python中灰度处理方法的应用
  • 4. 源码仓库地址

1. 图像灰度化

在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255,当灰度为255的时候,表示最亮(纯白);当灰度为0的时候,表示最暗(纯黑)。

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

2. 图像灰度化处理方法

图像灰度化处理有三种常用方法:最大值法、平均值法和加权平均法。

2.1 最大值法

最大值法,即直接取R,B,G三个分量中数值最大的分量的数值(0视为最小,255视为最大)。公式为:R=G=B=max(R,G,B)。

2.2 平均值法

平均值法,即取R,B,G三个分量中数值的均值。公式为:R=G=B=(R+G+B)/3。

2.3 加权平均法

根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像:

G r a y ( i , j ) = 0.299 ∗ R ( i , j ) + 0.578 ∗ G ( i , j ) + 0.114 ∗ B ( i , j ) Gray(i,j)=0.299*R(i,j)+0.578*G(i,j)+0.114*B(i,j) Gray(i,j)=0.299R(i,j)+0.578G(i,j)+0.114B(i,j)

3. 图像灰度化处理方法的Python实现

代码如下:

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as npimg = cv.imread('lenna.png')
img1 = cv.cvtColor(img, cv.COLOR_BGR2RGB) # BGR转化为RGB格式
plt.imshow(img1)
plt.title('Src_img')
plt.show()

图像如下:
在这里插入图片描述

3.1 最大值法

代码如下:

def Max_Gray(srcImg_path):img = cv.imread(srcImg_path)h,w = img.shape[0:2] # 获取图像尺寸gray = np.zeros((h,w),dtype=img.dtype) # 自定义空白单通道图像,用于存放灰度图# 对原图像进行遍历,然后分别灰度化for i in range(h):for j in range(w):gray[i,j] = max(img[i,j,0],img[i,j,1],img[i,j,2]) # 求3通道中最大值gray = cv.cvtColor(gray,cv.COLOR_BGR2RGB)plt.imshow(gray)plt.title('Max_Gray')#plt.axis('on')plt.show()

图像如下:
在这里插入图片描述

3.2 平均值法

代码如下:

def Avrage_Gray(srcImg_path):img = cv.imread(srcImg_path)h,w = img.shape[0:2] # 获取图像尺寸gray = np.zeros((h,w),dtype=img.dtype) # 自定义空白单通道图像,用于存放灰度图# 对原图像进行遍历,然后分别灰度化for i in range(h):for j in range(w):gray[i,j] = (int(img[i,j,0])+int(img[i,j,1])+int(img[i,j,2]))/3 # 求3通道像素的平均值作为灰度值gray = cv.cvtColor(gray,cv.COLOR_BGR2RGB)plt.imshow(gray)plt.title('Avrage_Gray')#plt.axis('on')plt.show()

图像如下:
在这里插入图片描述

3.3 加权平均法

代码如下:

def WeightedAvrage_Gray(srcImg_path):img = cv.imread(srcImg_path)h,w = img.shape[0:2] # 获取图像尺寸gray = np.zeros((h,w),dtype=img.dtype) # 自定义空白单通道图像,用于存放灰度图# 对原图像进行遍历,然后分别灰度化for i in range(h):for j in range(w):gray[i,j] = 0.114*int(img[i,j,0])+0.578*int(img[i,j,1])+0.299*int(img[i,j,2])gray = cv.cvtColor(gray,cv.COLOR_BGR2RGB)plt.imshow(gray)plt.title('WeightedAvrage_Gray')#plt.axis('on')plt.show()

图像如下:
在这里插入图片描述

3.4 最大值法、平均值法和加权平均法的比较

综上,3种方法的灰度处理图像如下所示:
在这里插入图片描述

可以发现,最大值法转换的灰度图亮度最高,平均值法产生的灰度图像较暗,加权平均法得到的灰度图像明暗介于两者之间。

3.5 opencv-python中灰度处理方法的应用

opencv-python中有图像灰度处理的接口,直接调用即可:

img = cv.imread('lenna.png')
img1 = cv.cvtColor(img, cv.COLOR_BGR2RGB) # BGR转化为RGB格式
plt.subplot(121)
plt.imshow(img1)
plt.title('Src_img')# 灰度转换
image2 = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
plt.subplot(122)
plt.imshow(image2, plt.cm.gray)
plt.title('Gray_img')
plt.show()

图像如下:
在这里插入图片描述

4. 源码仓库地址

🌼图像处理、机器学习的常用算法汇总


http://chatgpt.dhexx.cn/article/iTNvKGG0.shtml

相关文章

excel转换linux时间戳,在Excel中转换时间戳(timeStamp)

TEXT((A2/10008*3600)/8640070*36519,"yyyy-mm-dd hh:mm:ss.000") ((B2-70*365-19)*86400-8*3600)*1000 什么是时间戳? Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式。 定义为从…

java linux 时间戳转时间_Java时间和时间戳的相互转换

Java时间和时间戳的相互转换 时间转换为时间戳: /* * 将时间转换为时间戳 */ public static String dateToStamp(String s) throws ParseException{ String res; SimpleDateFormat simpleDateFormat new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date …

linux时间转excel,linux时间戳转换【操作模式】

虽然电脑已经很普遍了,但是一些年长的人对电脑的操作不是很熟悉,比如在使用win7系统时一旦遇到linux时间戳转换 时就懵了,对于linux时间戳转换 处理起来相对来说较简单,按照我们的步骤处理linux时间戳转换 很容易上手,…

excel linux时间戳转换成日期,Excel将Unix时间戳转换为日期

Excel默认不支持Unix格式时间戳,这在导入数据时十分不便。可以用以下公式将时间戳转换成Excel格式的时间:(A18*3600)/8640070*36519 其中A1为时间戳的单元格,8*3600中的8为中国的时区。然后将公式单元格设置为日期时间格式即可。转换结果如下…

Linux C/C++实现时间戳转换工具

在大多数 UNIX 系统中,当前时间存储为自特定时刻以来经过的时间以简化,将时间保持为长整数。所有 UNIX 系统普遍接受的时刻是 1970 年 1 月 1 日凌晨 12:00:00。 这称为 UNIX 时间戳,并被所有现代 UNIX/Linux 系统识别。 Linux 时间戳date命…

linux系统date命令(时间戳与日期相互转换)

引言 在做数据分析时经常会用到时间,但有时系统或应用时间显示的格式不统一,这就需要将格式转换为一致,才能对比数据进一步做分析,以前常用网上在线时间戳转换工具,但每次都在先打开浏览器进行搜索在线时间戳转换工具…

Linux下时间戳格式和标准时间格式的转换

大家都知道linux文件系统中的每个文件都有三种时间戳: 访问时间(atime——access time):就是上次访问这个文件的时间。 改变时间(ctime——change time):就是文件的inode改变的时间(…

Python——保存图片到本地

举个例子,比如我想保存github网,浏览器头有个图标. resp requests.get("https://github.com/favicon.ico") with open("C:\\Python37\\911.jpg",wb)as jpg: jpg.write(r.content)

python读取、保存图片的方法

matplotlib 输入:列表或二维矩阵 (1)例如列表: #codingutf-8 from matplotlib import pyplot as plt X [[1,2],[3,4],[5,6]] plt.imshow(X) #AxesImage(80,52.8;496x369.6) plt.colorbar() plt.show() #导入AxesImage结果…

python爬取网页图片教程之python爬虫获取图片保存图片

怎么用python爬取网页图片,今天我们以一个实例网页()来爬取页面中的所有图片。 1.获取图片的URL ** ** 首先我们要想获取图片的URL,就需要将该网页中的图片URL提取你,那么我们首先获取该网页的整个数据 然后我们通过…

python爬虫保存图片和文件

看了一篇博客,是这么保存图片的: 照做: src "https://i0.hdslb.com/bfs/sycp/creative_img/201912/01b2f081d58e49c708c1d32b7b8c20ed.jpg" r requests.get(src) with open("C://Users//yg//Desktop//bbb.jpg", "…

在Python中如何保存图像

在Python中如何保存图像,如何将数组保存为图像 主要是看了TensorFlow中第一部分中看到的,查了查资料总结下如何将数组保存为图像 原程序如下 import scipy.misc import os #from PIL import Image #把原始图片保存至MNIST_data/raw/下 save_dir"M…

Python获取图片保存对应的文件夹

首先创建的文件夹,先定义一个创建文件夹的函数: def makdir(path):try:isExists os.path.exists(path)#判断是否存在文件夹if not isExists:#不存在创建os.makedirs(path)print(path文件夹创建成功!)else:print(path文件夹已存在&#xff0…

【python学习】如何将所绘制的图(单张多张)保存到文件夹,并用绘制实时时间命名图片

python图片保存到文件夹 基本存储(plt.savefig())创建文件夹并存储图片(if结构OS模块)批量绘制图片批量存储(for循环)图片/文件夹命名与所运行时间关联(datatime模块) 最近一直在做…

python读取图片、保存图片的方法

转自:https://jingyan.baidu.com/article/1876c852572d2f890b137609.html 分步阅读 本文介绍一下,python读取图片、保存图片的方法。 工具/原料 电脑 python3.6(anaconda) matplotlib模块 opencv模块 pillow模块 photomos…

python读取和保存图片的三种方法

python读取和保存图片 opencv import cv2 #load img cv2.imread(0.png) #show cv.imshow(title, img) #save cv2.imwrite(1_cv2.png,img)可以看到opencv读取的图片数据类型是uint8格式(属于numpy),uint8是专门用于存储各种图像的&#xff…

python读取与保存图片的exif信息

图片的exif文件格式中保存了很多信息,比如GPS经纬度,高度,焦距等信息。 在图片的属性中可以看到这些信息: 我们可以使用python来进行exif数据的读取和保存。 1. 首先安装piexif pip3 install piexif 2.exif数据读取代码 impo…

Python 保存图片的两种方法

有时我们需要保存我们的图片,那我们可以怎么保存呢? 可参考下列保存的两种方法: 第一种:cv2.imwrite() 示例: # 方法一 : import cv2 cv2.imwrite("imwrite_pic.jpg", cv2.imread(pic.jpg)) 第二种:i…

python图片存取四种常用方法记录

一、PIL(Python Imaging Library)#python图像处理库 from PIL import Image import numpy as np #数值计算扩展包I Image.open("1.jpg") #读入图片 I.show() #显示图片 print(I) …

python保存图片的常用方法

保存图片的常用方法 1.PIL的保存图片方法 path r"./001.jpg" #图片路径 img Image.open(path) #打开图片 img.save("1.jpg") #将图片保存为1.jpg2.opencv保存图片 path r"./001.jpg" #图片路径 #img cv.imdecode(np.fromfi…