图像平滑&颜色空间转换

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值