import cv2
import matplotlib.pyplot as plt
import numpy as np
#显示图片
def show(image):
plt.imshow(image)
plt.axis('off')
plt.show()
#读取图片,由BGR格式转换为RGB格式
def imread(image):
image = cv2.imread(image)
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
return image
image = imread('view.jpeg')
show(image)
kernelsizes = [(3,3),(9,9),(15,15)]#代表三个不同的卷积大小
plt.figure(figsize=(15,15))#定义一个图,图的大小为15*15
for i,kernel in enumerate(kernelsizes):
plt.subplot(1,3,i+1)
#在之前定义好的图片上画子图
#定义好的图片分成一行三列的图片,每循环一次画一张
#比如第一次循环画的就是一行三列中的第一列图片
#平均平滑
blur = cv2.blur(image,kernel)
#不显示坐标
plt.axis('off')
#设置标题
plt.title('Blurred'+str(kernel))
plt.imshow(blur)
plt.show()
#卷积的窗口越大,图片越模糊(并且图片中的小白点也会被去掉)
Gaussian高斯模糊
#高斯模糊
kernelsizes = [(3,3),(9,9),(15,15)]#代表三个不同的卷积大小
plt.figure(figsize=(15,15))#定义一个图,图的大小为15*15
for i,kernel in enumerate(kernelsizes):
plt.subplot(1,3,i+1)
#在之前定义好的图片上画子图
#定义好的图片分成一行三列的图片,每循环一次画一张
#比如第一次循环画的就是一行三列中的第一列图片
#高斯模糊
blur = cv2.GaussianBlur(image,kernel,0)#增加的0指的是标准差为0
#不显示坐标
plt.axis('off')
#设置标题
plt.title('GaussianBlur'+str(kernel))
plt.imshow(blur)
plt.show()
#卷积的窗口越大,图片越模糊
Median中值模糊
image = imread('hhhhh.jpeg')
show(image)
plt.figure(figsize=(15,15))#定义一个图,图的大小为15*15
for i,kernel in enumerate((3,9,15)):
#与上面类似,卷积的大小为3*3,9*9,15*15
plt.subplot(1,3,i+1)
#在之前定义好的图片上画子图
#定义好的图片分成一行三列的图片,每循环一次画一张
#比如第一次循环画的就是一行三列中的第一列图片
#中值模糊
blur = cv2.medianBlur(image,kernel)#增加的0指的是标准差为0
#不显示坐标
plt.axis('off')
#设置标题
plt.title('medianBlur'+str(kernel))
plt.imshow(blur)
plt.show()
#卷积的窗口越大,图片越模糊,但图片上的黑点和白点都去除掉了
Bilateral双边滤波
#Bilateral双边滤波
image = imread('hhhhbbbb.jpeg')
show(image)
params = [(11,21,7),(11,41,21),(15,75,75)]#代表三个不同的卷积大小
plt.figure(figsize=(15,15))#定义一个图,图的大小为15*15
#三个参数依次为领域直径、灰度值相似性高斯函数标准差、空间高斯函数标准差
for i,(diameter,sigmaColor,sigmaSpace) in enumerate(params):
plt.subplot(1,3,i+1)
#在之前定义好的图片上画子图
#定义好的图片分成一行三列的图片,每循环一次画一张
#比如第一次循环画的就是一行三列中的第一列图片
blur = cv2.bilateralFilter(image,diameter,sigmaColor,sigmaSpace)
#不显示坐标
plt.axis('off')
#设置标题
plt.title('Blurred'+str((diameter,sigmaColor,sigmaSpace)))
plt.imshow(blur)
plt.show()
#将图片中的小黑点消掉了但是却并没有模糊边界
RGB
image = imread('hhhhh.jpeg')
(R,G,B) = cv2.split(image) #切分R,G,B
zeros = np.zeros(image.shape[:2],dtype = 'uint8')
#创造一个像素全为0,形状和image一样的图
show(cv2.merge([R,zeros,zeros]))#融合R和背景图
show(cv2.merge([zeros,G,zeros]))
show(cv2.merge([zeros,zeros,B]))
HSV
image = imread('hhhhh.jpeg')
hsv = cv2.cvtColor(image,cv2.COLOR_RGB2HSV)#RGB变成HSV格式
zeros = np.zeros(image.shape[:2],dtype='uint8')
for (name,chan) in zip(('H','S','V'),cv2.split(hsv)):
cv2.imshow(name,chan)
cv2.waitKey(0)
cv2.destroyAllWindows()
Lab
image = imread('hhhhh.jpeg')
hsv = cv2.cvtColor(image,cv2.COLOR_RGB2LAB)#RGB变成LAB格式
zeros = np.zeros(image.shape[:2],dtype='uint8')
for (name,chan) in zip(('L','A','B'),cv2.split(hsv)):
cv2.imshow(name,chan)
cv2.waitKey(0)
cv2.destroyAllWindows()
Grayscale
灰阶图像就是黑白图片,通过调节灰度值来显示图像
image = imread('wwwwww.jpeg')
gray = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
cv2.imshow('original',image)
cv2.imshow('gray',gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
为什么显色有些奇怪呢?因为opencv自带的格式是BGR,我们将其先转换为RGB,再由RGB转换为GRAY,而在后面调用inshow又是用RGB格式显示的
要是想显示原始图片
image = cv2.imread('wwwwww.jpeg')
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('original',image)
cv2.imshow('gray',gray)
cv2.waitKey(0)
cv2.destroyAllWindows()