【数字图像处理实验二】:RGB图3个通道的提取、RGB图转灰度图、图片反转、图片亮度调整、直方图显示

前言

这里介绍:RGB图3个通道的提取、RGB图转灰度图、图片反转、图片亮度调整、直方图显示具体操作,需导入的库如下:

from skimage import exposure
import cv2

原图如下:

# 读取图片
lena = cv2.imread("lena.tif")  

# 显示图片
cv2.imshow('lena', lena)
cv2.waitKey(0)

【数字图像处理实验二】:RGB图3个通道的提取、RGB图转灰度图、图片反转、图片亮度调整、直方图显示_第1张图片

一、RGB图3个通道的提取

# 读取图像
lena = cv2.imread("lena.tif")  

# RGB3个通道的提取
(B, G, R) = cv2.split(lena)  #提取R、G、B分量,opencv读取顺序是BGR,所以提取顺序也是BGR
cv2.imshow("Red",R)
cv2.imshow("Green",G)
cv2.imshow("Blue",B)
cv2.waitKey(0)

结果如下,从左到右分别是:Red,Green,Blue

二、RGB图转灰度图

灰度图就是在黑白之间划分0-255个颜色深度的图像

# 读取图像
lena = cv2.imread("lena.tif")  

# RGB图转为灰度图
gray_lena = cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY)

# 显示图片
cv2.imshow('gray_lena', gray_lena)
cv2.waitKey(0)

【数字图像处理实验二】:RGB图3个通道的提取、RGB图转灰度图、图片反转、图片亮度调整、直方图显示_第2张图片

三、图片反转

# 读取图像
lena = cv2.imread("lena.tif")  

# 图片反转
re_lena = 255 - lena  # 图片中的像素值是0-255的整数,所以反转就是255减去每个位置的像素值

# 显示图片
cv2.imshow('re_lena', re_lena)
cv2.waitKey(0)

【数字图像处理实验二】:RGB图3个通道的提取、RGB图转灰度图、图片反转、图片亮度调整、直方图显示_第3张图片

四、图片亮度调整

这里借助skimage库中的exposure函数来进行图像亮度的调整

如果gamma > 1,新图像比原图像暗
如果gamma < 1,新图像比原图像亮

# 读取图像
lena = cv2.imread("lena.tif")  

# 亮度变换
lena_gam1 = exposure.adjust_gamma(lena, 2)   #调暗
lena_gam2 = exposure.adjust_gamma(lena, 0.5)  #调亮
cv2.imshow('lena_gam1', lena_gam1)
cv2.imshow('lena_gam2', lena_gam2)
cv2.waitKey(0)

结果如下:

五、直方图显示

这里用 plt.hist( ) 函数进行直方图显示,每次都要将图片中的多维数组转为一维数组,下面是lena的灰度图的直方图。

# 读取图像
lena = cv2.imread("lena.tif")  

# 转为灰度图
gray_lena = cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY)

# 绘制直方图
plt.hist(gray_lena.flatten(),  # flatten 转一维数组
         bins=256,  # 指定直方图中长方形的个数,像素是0-255,所以是256
         edgecolor='blue',  # 指定直方图中长方形边框的颜色
         facecolor='red'    # 指定直方图中长方形内部的颜色
         )
         
# 显示直方图
plt.show()

结果如下:
【数字图像处理实验二】:RGB图3个通道的提取、RGB图转灰度图、图片反转、图片亮度调整、直方图显示_第4张图片


总代码如下:

from skimage import exposure
import cv2

# 读取图片
lena = cv2.imread("lena.tif")  # cv2 读Breast的方式为多维数组

# 显示图片
cv2.imshow('lena', lena)
cv2.waitKey(0)



# RGB3个通道的提取
(B, G, R) = cv2.split(lena)#提取R、G、B分量
cv2.imshow("Red",R)
cv2.imshow("Green",G)
cv2.imshow("Blue",B)
cv2.waitKey(0)



# RGB图转为灰度图
gray_lena = cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY)

# 显示图片
cv2.imshow('gray_lena', gray_lena)
cv2.waitKey(0)



# 图片反转
re_lena = 255 - lena

# 显示图片
cv2.imshow('re_lena', re_lena)
cv2.waitKey(0)



# 亮度变换
lena_gam1 = exposure.adjust_gamma(lena, 2)   #调暗
lena_gam2 = exposure.adjust_gamma(lena, 0.5)  #调亮
cv2.imshow('lena_gam1', lena_gam1)
cv2.imshow('lena_gam2', lena_gam2)
cv2.waitKey(0)


# 绘制直方图
plt.hist(gray_lena.flatten(),  # flatten 转一维数组
         bins=256,  # 指定直方图中长方形的个数,像素是0-255,所以是256
         edgecolor='blue',  # 指定直方图中长方形边框的颜色
         facecolor='red'    # 指定直方图中长方形内部的颜色
         )
         
# 显示直方图
plt.show()

你可能感兴趣的:(数字图像处理基础入门,计算机视觉,opencv,python)