python之彩色图像变灰度图像

发布时间:2023年12月19日

目录

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()

文章来源:https://blog.csdn.net/T20151470/article/details/135074041
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。