python 图像处理之图像灰度化 cvtColor

这篇具有很好参考价值的文章主要介绍了python 图像处理之图像灰度化 cvtColor。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

预备知识
图像灰度化是将一幅彩色图像转换为灰度化图像的过程。
彩色图像的色彩通常由R、G、B三个分量组合而成(其实就是3个二维数组叠加而成),从而搭配出各种颜色
灰度图像中每个像素仅具有一种样本颜色,其灰度是位于黑色与白色之间的多级色彩深度,灰度值大的像素点比较亮,反之比较暗,像素值最大为255(表示白色),像素值最小为0(表示黑色)。
在python中,图像的数据结构为numpy数组。这里需要注意的是,用于表示图像的numpy数组,其数据类型必须是整数类型而不能是浮点数类型,这一点我们在下面还会提到。

图像的灰度变换可以通过有选择的突出图像感兴趣的特征或者抑制图像中不需要的特征,从而改善图像的质量,凸显图像的细节,提高图像的对比度。它也能有效地改变图像的直方图分布,使图像的像素值分布更为均匀[2-3]。它在实际中有很多的应用:

  • 光度学标定 对比度增强 对比度扩展 显示标定 轮廓线确定

常见灰度处理算法

假设某点的颜色由RGB(R,G,B)组成,常见灰度处理算法如表1-1所示:
cvtcolor,图像处理,python,图像处理,计算机视觉
表中Gray表示灰度处理之后的颜色,然后将原始RGB(R,G,B)颜色替换成新颜色RGB(Gray,Gray,Gray),从而将彩色图片转化为灰度图像。
一种常见的方法是将RGB三个分量求和再取平均值,但更为准确的方法是设置不同的权重,将RGB分量按不同的比例进行灰度划分。比如人类的眼睛感官蓝色的敏感度最低,敏感最高的是绿色,因此将RGB按照0.299、0.587、0.144比例加权平均能得到较合理的灰度图像,公式如图所示:
cvtcolor,图像处理,python,图像处理,计算机视觉
在日常生活中,我们看到的大多数彩色图像都是RGB类型,但是在图像处理过程中,常常需要用到灰度图像、二值图像、HSV、HSI等颜色,OpenCV提供了cvtColor()函数实现这些功能

dst = cv2.cvtColor(src, code[, dst[, dstCn]])

– src表示输入图像,需要进行颜色空间变换的原图像
– dst表示输出图像,其大小和深度与src一致
– code表示转换的代码或标识
– dstCn表示目标图像通道数,其值为0时,则有src和code决定
该函数的作用是将一个图像从一个颜色空间转换到另一个颜色空间,其中,RGB是指Red、Green和Blue,一副图像由这三个通道(channel)构成;Gray表示只有灰度值一个通道;HSV包含Hue(色调)、Saturation(饱和度)和Value(亮度)三个通道。

在OpenCV中,常见的颜色空间转换标识包括CV_BGR2BGRA、CV_RGB2GRAY、CV_GRAY2RGB、CV_BGR2HSV、CV_BGR2XYZ、CV_BGR2HLS等。下面是调用cvtColor()函数将图像进行灰度化处理的代码。

下面代码对比了九种常见的颜色空间,包括BGR、RGB、GRAY、HSV、YCrCb、HLS、XYZ、LAB和YUV,并循环显示处理后的图像。

import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#读取原始图像
img_BGR = cv2.imread('luo.png')

img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB)     #BGR转换为RGB
img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY)   #灰度化处理
img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)     #BGR转HSV
img_YCrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb) #BGR转YCrCb
img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS)     #BGR转HLS
img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ)     #BGR转XYZ
img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB)     #BGR转LAB
img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV)     #BGR转YUV

#调用matplotlib显示处理结果
titles = ['BGR', 'RGB', 'GRAY', 'HSV', 'YCrCb', 'HLS', 'XYZ', 'LAB', 'YUV']  
images = [img_BGR, img_RGB, img_GRAY, img_HSV, img_YCrCb,
          img_HLS, img_XYZ, img_LAB, img_YUV]  
for i in range(9):  
   plt.subplot(3, 3, i+1), plt.imshow(images[i], 'gray')  
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()

其运行结果如图所示:
cvtcolor,图像处理,python,图像处理,计算机视觉

基于像素操作的图像灰度化处理

前面讲述了调用OpenCV中cvtColor()函数实现图像灰度化的处理,接下来讲解基于像素操作的图像灰度化处理方法,主要是最大值灰度处理、平均灰度处理和加权平均灰度处理方法。

1.最大值灰度处理方法*

该方法的灰度值等于彩色图像R、G、B三个分量中的最大值,公式如下:
cvtcolor,图像处理,python,图像处理,计算机视觉
其方法灰度化处理后的灰度图亮度很高,实现代码如下。

import cv2
import numpy as np
import matplotlib.pyplot as plt

#读取原始图像
img = cv2.imread('C:/Users/Administrator/Desktop/tutu.jpeg')

#获取图像高度和宽度
height = img.shape[0]
width = img.shape[1]

#创建一幅图像
grayimg = np.zeros((height, width, 3), np.uint8)

#图像最大值灰度处理
for i in range(height):
    for j in range(width):
        #获取图像R G B最大值
        gray = max(img[i,j][0], img[i,j][1], img[i,j][2])
        #灰度图像素赋值 gray=max(R,G,B)
        grayimg[i,j] = np.uint8(gray)

#设置图像的大小
img = cv2.resize(img,(280,280))
grayimg = cv2.resize(grayimg,(280,280))


#显示图像
cv2.imshow("src", img)
cv2.imshow("gray", grayimg)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如图所示:
cvtcolor,图像处理,python,图像处理,计算机视觉

2.平均灰度处理方法

该方法的灰度值等于彩色图像R、G、B三个分量灰度值的求和平均值,其计算公式如图所示:
cvtcolor,图像处理,python,图像处理,计算机视觉
平均灰度处理方法实现代码如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt

#读取原始图像
img = cv2.imread('C:/Users/Administrator/Desktop/tutu.jpeg')

#获取图像高度和宽度
height = img.shape[0]
width = img.shape[1]

#创建一幅图像
grayimg = np.zeros((height, width, 3), np.uint8)

#图像平均灰度处理方法
for i in range(height):
    for j in range(width):
        #灰度值为RGB三个分量的平均值
        gray = (int(img[i,j][0]) + int(img[i,j][1]) + int(img[i,j][2]))  /  3
        grayimg[i,j] = np.uint8(gray)

#设置图像的大小
img = cv2.resize(img,(280,280))
grayimg = cv2.resize(grayimg,(280,280))

#显示图像
cv2.imshow("src", img)
cv2.imshow("gray", grayimg)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如图所示:
cvtcolor,图像处理,python,图像处理,计算机视觉

3.加权平均灰度处理方法

该方法根据色彩重要性,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。
cvtcolor,图像处理,python,图像处理,计算机视觉
加权平均灰度处理方法实现代码如下所示:

import cv2
import numpy as np
import matplotlib.pyplot as plt

#读取原始图像
img = cv2.imread('C:/Users/Administrator/Desktop/tutu.jpeg')

#获取图像高度和宽度
height = img.shape[0]
width = img.shape[1]

#创建一幅图像
grayimg = np.zeros((height, width, 3), img.dtype)

#图像平均灰度处理方法
for i in range(height):
    for j in range(width):
        #灰度加权平均法
        value = img[i][j]
		img_gray[i][j] = int(0.11*value[0]+0.59*value[1]+0.3*value[2])

#设置图像的大小
img = cv2.resize(img,(280,280))
grayimg = cv2.resize(grayimg,(280,280))

#显示图像
cv2.imshow("src", img)
cv2.imshow("gray", grayimg)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如图所示:
cvtcolor,图像处理,python,图像处理,计算机视觉

或者简洁一点:

import cv2

img = cv2.imread('C:/Users/Administrator/Desktop/tutu.jpeg')
img = cv2.resize(img,None,fx=0.5,fy=0.5)
b,g,r = img[:,:,0],img[:,:,1],img[:,:,2]
gray = 0.11*b+0.59*g+0.3*r
gray = gray.astype(img.dtype)
cv2.imshow("gray",gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

参考链接:https://blog.csdn.net/Eastmount/article/details/123006082文章来源地址https://www.toymoban.com/news/detail-774055.html

到了这里,关于python 图像处理之图像灰度化 cvtColor的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV图像处理-灰度处理

    灰度的线性变换将图像中的所有像素点的值按 线性变换函数 进行变换。 在曝光不足或过度的情况下,图像的灰度值会局限在一个很小的范围内,这时在显示器上看到的将是一个模糊不清、似乎没有层次的图像。 针对这一情况,使用一个线性单值函数对图像内的每一个像素做

    2024年02月08日
    浏览(106)
  • opencv 图像基础处理_灰度图像

    二值图像表示起来简单方便,但是因为其仅有黑白两种颜色,所表示的图像不够细腻。如果想要表现更多的细节,就需要使用更多的颜色。例如,图 2-3 中的 lena 图像是一幅灰度图像, 它采用了更多的数值以体现不同的颜色,因此该图像的细节信息更丰富。 通常,计算机会将

    2024年02月15日
    浏览(57)
  • 图像处理(二值图、灰度图、彩色图像)

    图像处理之二值图像、灰度图像、RGB图像 1、二值图像 定义:二值图像是值仅仅包含黑色和白色的图像 计算机在处理时,会把黑色像素点处理为0,白色像素点处理1。由于只用一个比特位就能表示,所以称之为二值图像。 2、灰度图 为了表达更丰富的颜色细节,灰度图采用更

    2024年02月06日
    浏览(61)
  • 图像预处理算法————灰度化处理

    图像预处理算法适合在FPGA上完成,原理简单且需要快速处理,通常有灰度化、中值、均值滤波等,以及颜色空间转换算法。 灰度图像是一种特殊的彩色图像(R=G=B的彩色图像) 只有一种颜色分量,单通道的0-255 方法:一般有分量法、最大值法、平均值法、加权平均法四种方

    2024年01月17日
    浏览(51)
  • FPGA图像处理-灰度化

    用 verilog 实现彩色图像的灰度化算法,并进行 Modelsim 仿真。 图像处理操作中最简单的一类就是点操作,一个像素的输出只取决于输入图像的相应像素值。 RGB 转 GRAY 公式: GRAY = 0.299R + 0.587G + 0.114B 由于 FPGA 不方便小数运算,所以放大 256 倍进行运算,然后右移 8 位: GRAY = (

    2024年02月07日
    浏览(47)
  • matlab数字图像处理——图像的读写,灰度、二值图像

    一、实验目的 1.结合数字图像处理的知识,直观感受图像处理的基本实现过程 2.熟悉MATLAB工具的使用 3.了解图像的读写和显示 二、实验内容 实验内容一:图像读取 (1)利用编程实现读取图像 利用imread读取文件夹images中的图像;查看读取到的图像数据矩阵,对比灰度图像、

    2024年02月07日
    浏览(58)
  • Opencv 图像处理:图像基础操作与灰度转化

    本文已收录于Opencv系列专栏: 深入浅出OpenCV ,专栏旨在详解Python版本的Opencv,为计算机视觉的开发与研究打下坚实基础。免费订阅,持续更新。 1.图像格式 图像压缩比: 通过编码器压缩后的图象数字大小和原图象数字大小的压缩比。 BMP 格式 Windows系统下的 标准位图格式 ,

    2024年02月04日
    浏览(51)
  • 图像的灰度处理

    在OpenCV中,灰度处理主要有两种方法:亮度法和加权平均法。   1. 亮度法(Luminosity Method):灰度图像的亮度法是通过对彩色图像的RGB通道进行加权平均来计算灰度值。通常使用以下公式计算每个像素的灰度值, 其中,R、G、B分别表示红色、绿色和蓝色通道的像素值。该方

    2024年02月11日
    浏览(52)
  • 【OpenCV】 基础入门(二)图像基础概念 | 图像灰度化处理 | 图像二值化处理

      在计算机中用一般用 M x N 的矩阵来表示一幅尺寸大小为 M x N 的数字图像,矩阵元素的值就是该图像对应位置上的像素值。    对于计算机本地磁盘中的彩色图像,单机鼠标右键,选择“属性”,可以看到一幅图像的基本信息。 1、灰度图:   灰度图是每个像素只有一

    2024年04月14日
    浏览(51)
  • 【Python入门系列】第十篇:Python图像处理和计算机视觉

    图像处理和计算机视觉是计算机科学中非常重要的领域之一。Python作为一种功能强大且易于学习的编程语言,提供了许多用于图像处理和计算机视觉的库和工具。本文将介绍一些常用的Python库,并提供一些示例代码。 Python中有几个流行的图像处理库,其中最常用的是OpenCV和

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包