1.安装PIL包,skimage包,导入这些必需的库
from skimage import io,data,color
2.使用io包下的imread方法:加载图片;imshow:显示图像;r的作用:确保字符串中的反斜杠不会被解释为转义序列
img = io.imread(r'C:\Users\86130\Desktop\test1.png')
io.imshow(img)
io.show()
运行结果1:
3.as_gray=True:将图像进行灰度处理
img = io.imread(r'C:\Users\86130\Desktop\test1.png',as_gray = True)
io.imshow(img)
运行结果2:
4.加载skimage包下的data模块的图片(data模块提供一些测试图片)
img = data.coffee()
io.imshow(img)
运行结果3:
5.将程序自带的图片进行灰度处理;
from skimage import io, data, color #导入必需的包
img = data.coffee() #加载程序里的图片
gray_img = color.rgb2gray(img) #函数用于将彩色图像转换为灰度图像
io.imshow(gray_img, cmap='gray') #cmap=’gray’:确保图像以灰度显示出来
io.show()
运行结果4:
6.data_dir是一个模块属性:提供了skimage库中示例数据集的目录路径;路径自动检测,它基于skimage库的安装位置
from skimage import data_dir
print(data_dir) #打印图像路径
运行结果5:
7.保存图像,使用io包下的imsave方法:第一个参数:图像要保存的文件路径,第二个参数:被保存的图像
from skimage import io,data
img = data.coffee()
io.imshow(img)
io.imsave(r'D:\gf\2.jpg',img)
运行结果6:
8.遍历指定文件夹内的所有图片文件,并将它们以PNG格式保存到同一文件夹中,文件名后面加上_wzq
1 from skimage import io
2 import os
3 path = 'D:/ttttpppp'
4 names = os.listdir(path)
5 for file_name in names:
6 if file_name.lower().endswith(('.png', '.jpg', '.jpeg')):
7 photo_path = os.path.join(path, file_name)
8 img = io.imread(photo_path)
9 new_file_name = f'{os.path.splitext(file_name)[0]}_wzq.png'
10 new_photo_path = os.path.join(path, new_file_name)
11 io.imsave(new_photo_path, img)
第1、2行代码:导入所需的包,os用于文件目录的操作
第3行代码:照片所在文件夹的路径(创建文件夹,里面放自己需要处理的图像)
第4行代码:获取文件夹内所有文件的名字,将它们存储在列表names中
第5行代码:遍历names列表中的每个文件名
第6行代码:检查文件扩展名,确保只有图片文件为(PNG, JPG, JPEG)会被处理
第7行代码:将path和file_name两个字符串拼接成一个完整的文件路径,将这个路径赋值给photo_path
第8行代码:读取存储在变量photo_path中的图片
第9行代码:分割file_name为两部分,‘名字’+‘后缀’,'_wzq.png'是一个字符串,附加到‘名字’后面
第10行代码:创建新的保存路径
第11行代码:将图片保存到新的路径,这里图片保存的是PNG格式
9.图像基本信息
9.1显示类型
print(type(img))
运行结果7:
9.2显示尺寸
print(img.shape)
运行结果8:参数:宽度 高度 通道数
9.3图片宽度(0代表索引,也就是上面第一个参数)
print(img.shape[0])
9.4图片高度
print(img.shape[1])
9.5图片通道数(彩色图像通常是 3(红、绿、蓝),灰度图像是 1)
print(img.shape[2])
9.6显示总像素个数
print(img.size)
9.7最大像素值(对于灰度图像,每个像素的值范围是从0到255,0代表黑色,255代表白色。在这种情况下,最大像素值就是255)
print(img.max())
9.8最小像素值
print(img.min())
9.9像素平均值
print(img.mean())
10.加椒盐噪点
1 from skimage import io,data
2 import numpy as np
3 img = io.imread(r'C:\Users\86130\Desktop\test1.png')
4 row,col,dim = img.shape
5 for i in range(6000):
6 x = np.random.randint(0,row)
7 y = np.random.randint(0,col)
8 img[x,y,:]=255
9 io.imshow(img)
10 io.imsave('D:/gf/TEST.png',img)
注:代码行中的数字均为我自己标注的,与代码内容无关
第1、2行代码:导入所需的模块和函数
第3行代码:使用io.imread函数读取指定路径的图像文件,然后存储在变量img中
第4行代码:获取图像的行数、列数和颜色通道数,并将它们分别存储在变量row、col和dim中
第5行代码:使用for循环,重复6000次,
第6、7行代码:使用random.randint函数生成两个随机整数,分别代表行索引x,列索引y
第8行代码:将图像img在索引(x, y)处的像素值设置为255,也就是在图像的随机位置添加白色点(噪点)
第9行代码:显示图片
第10行代码:保存图片
运行结果9:
11.去除噪点
11.1中值滤波
zs_img= io.imread('D:/gf/TEST.png') #导入噪点图像
median = cv2.medianBlur(zs_img,3) #使用中值滤波方法去除噪点,第一个参数:噪点图像;第二个参数:核大小
io.imshow(median)
运行结果10:
11.2高斯滤波
immg = io.imread('D:/gf/TEST.png')
gs_immg = cv2.GaussianBlur(immg,(5,5),0) #第一个参数(5,5):卷积核大小,第二个参数(0):我理解的是数值越大,图像越模糊
io.imshow(gs_immg)
运行结果11:
11.3 高斯滤波和中值滤波的区别
1、高斯滤波适用于去除随机噪声,但可能会模糊图像细节
2、中值滤波适用于去除椒盐噪声,并能较好地保持图像边缘和细节
裁剪图像
from skimage import io,data
img = data.cat()
roi = img[80:150,130:210,:]
io.imshow(roi)
第1行代码:导包
第2行代码:加载程序自带的图像
第3行代码:从img切出了一块区域,第一个参数:行(高度)从80-150(不包括150);第二个参数:列(宽度)从130-210(不包括210);第三个参数:表示所有通道
运行结果12:
经过参数的修改:roi = img[80:170,130:350,:]