这里介绍:RGB图3个通道的提取、RGB图转灰度图、图片反转、图片亮度调整、直方图显示具体操作,需导入的库如下:
from skimage import exposure
import cv2
# 读取图片
lena = cv2.imread("lena.tif")
# 显示图片
cv2.imshow('lena', lena)
cv2.waitKey(0)
# 读取图像
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
灰度图就是在黑白之间划分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)
# 读取图像
lena = cv2.imread("lena.tif")
# 图片反转
re_lena = 255 - lena # 图片中的像素值是0-255的整数,所以反转就是255减去每个位置的像素值
# 显示图片
cv2.imshow('re_lena', re_lena)
cv2.waitKey(0)
这里借助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()
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()