图像处理
- skimage包的子模块
- 1.读取图像
- 2.图像灰度处理
- 3.加载程序自带图像
- 4.查看存储路径
- 5.保存图片
- 6.图片信息
- 7.输出小猫图片的G通道中的第20行30行列的像素值
- 8.显示红色单通道图片
- 9.对小猫图片添加椒盐噪声
- 10.高斯去噪
- 11.中值滤波去噪
- 12.随机生成噪声点
- 13.对小猫图像进行裁剪
- 14.对像素点进行操作
skimage包的子模块
io:读取、保存和显示图片或视频
data:提供一些测试图片和样本数据
color:颜色空间变换
filters:图像增强、边缘检测、排序滤波器、自动阈值等
draw:操作于numpy数组上的基本图形绘制,包括线条、矩形、圆和文本等
transform:几何变换或其它变换,如旋转、拉伸和拉东变换等
morphology:形态学操作,如开闭运算、骨架提取等
exposure:图片强度调整,如亮度调整、直方图均衡等
feature:特征检测与提取等
measure:图像属性的测量,如相似性或等高线等
segmentation:图像分割
restoration:图像恢复
util:通用函数
1.读取图像
#导包,io模块提供了图像输入输出的功能
from skimage import io
#io.imread()函数读取图像文件
img = io.imread('iii.jpg',as_gray=True)
#io.imshow()函数显示存储在变量img中的图像
io.imshow(img)
io.show()
2.图像灰度处理
#io模块提供了图像输入输出的功能
from skimage import io
#io.imread()函数读取图像文件,并将其以灰度图像的形式存储在变量img中
img = io.imread('iii.jpg',as_gray=True)
io.imshow(img)
io.show()
3.加载程序自带图像
skimage程序自带了一些示例图片,如果我们不想从外部读取图片,就可以直接使用这些示例图片:
astronaut 宇航员图片
coffee 一杯咖啡图片
lena 美女图片
camera 拿相机的人图片
coins 硬币图片
moon 月亮图片
checkerboard 棋盘图片
horse 马图片
page 书页图片
chelsea 小猫图片
hubble_deep_field 星空图片
text 文字图片
clock 时钟图片
immunohistochemistry 结肠图片
显示这些图片可用如下代码,不带任何参数
#io模块提供了图像输入输出的功能,data模块包含了一些示例图像。
from skimage import io,data
#加载名为chelsea小猫的示例图像
img=data.chelsea()
io.imshow(img)
4.查看存储路径
#data_dir用于存储示例图像数据集的路径
from skimage import data_dir
print(data_dir)
显示结果:
5.保存图片
使用io模块的imsave(fname,arr)函数来实现。第一个参数表示保存的路径和名称,第二个参数表示需要保存的数组变量。
from skimage import data,io
img = data.chelsea()
io.imshow(img)
io.imsave('D:\cat1.jpg',img)
保存图片的同时也起到了转换格式的作用。如果读取时图片格式为jpg图片,保存为png格式,则将图片从jpg图片转换为png图片并保存。
6.图片信息
from skimage import io,data
img=data.chelsea()
io.imshow(img)
print(type(img)) #显示类型
print(img.shape) #显示尺寸
print(img.shape[0]) #图片宽度
print(img.shape[1]) #图片高度
print(img.shape[2]) #图片通道数
print(img.size) #显示总像素个数
print(img.max()) #最大像素值
print(img.min()) #最小像素值
print(img.mean()) #像素平均值
7.输出小猫图片的G通道中的第20行30行列的像素值
img[i,j,c]:
i表示图片的行数,j表示图片的列数,c表示图片的通道数
(RGB三通道分别对应0,1,2)
from skimage import io,data
img = data.chelsea()
pixel=img[20,30,1]
print(pixel)
8.显示红色单通道图片
from skimage import io,data
img = data.chelsea()
#提取红色通道
R=img[:,:,0]
io.imshow(R)
提取蓝色通道数据:B = img[:,:,2]
提取绿色通道数据:G = img[:,:,1]
9.对小猫图片添加椒盐噪声
用到了numpy包里的random来生成随机数,randint(0,cols)表示随机生成一个整数,范围在0到cols之间。
用img[x,y,:]=255这句来对像素值进行修改,将原来的三通道像素值,变为255
from skimage import io,data
import numpy as np
img = data.chelsea()
#获取图像的行数、列数和通道数。
rows,cols,dims = img.shape
#随机生成50000个椒盐
for i in range(50000):
#随机生成椒盐噪声点的坐标(x和y)
x=np.random.randint(0,rows)
y=np.random.randint(0,cols)
img[x,y,:]=200
io.imshow(img)
10.高斯去噪
高斯模糊是一种常用的去除噪声的方法,通过对图像进行模糊处理来平滑图像,去除噪声。
先保存刚刚的椒盐去噪图片
io.imsave('D:\jycat1.jpg',img)
import cv2
#读取图像
image = cv2.imread(r'D:\rgzn\jycat.png')
#这行代码调用cv2.GaussianBlur()函数,对读取的图像进行高斯模糊处理。
#参数(5, 5)表示卷积核的大小为5x5,第三个参数0表示在X和Y方向上的高斯标准差。
blurred_image = cv2.GaussianBlur(image,(5,5),0)
#使用cv2.imshow()函数显示名为Blurred Image的窗口,并在该窗口中显示经过高斯模糊处理后的图像blurred_image。
cv2.imshow('Blurred Image',blurred_image)
#等待用户按下任意键。
cv2.waitKey(0)
#关闭所有打开的窗口。
cv2.destroyAllWindows()
11.中值滤波去噪
中值滤波是一种非线性滤波方法,对每个像素点周围的像素值取中值,从而有效去除椒盐噪声等噪声。
import cv2
image = cv2.imread(r'D:\rgzn\jycat.png')
#对读取的图像进行中值模糊处理。参数5表示卷积核的大小为5x5。
median_blurred_image = cv2.medianBlur(image, 5)
#使用cv2.imshow()函数显示名为Median Blurred Image的窗口,并在该窗口中显示经过中值模糊处理后的图像
cv2.imshow('Median Blurred Image', median_blurred_image)
#等待用户按下任意键。
cv2.waitKey(0)
#关闭所有打开的窗口。
cv2.destroyAllWindows()
12.随机生成噪声点
import cv2
import numpy as np
import random
img = cv2.imread('mao.jpg')
#获取图像的形状信息,包括高度、宽度和通道数,并将其存储在ingInfo变量中。
ingInfo = img.shape
#获取图像高度
h = ingInfo[0] - 1
#获取图像宽度
w = ingInfo[1] -1
# 噪声点的个数
temp = 2500
#偶数白点,奇数黑点
for i in range(0, temp):
if random.randint(1, temp) % 2 == 0:
img[random.randint(0, h), random.randint(0, w)] = (255, 255, 255)
if random.randint(1, temp) % 2 != 0:
img[random.randint(0, h), random.randint(0, w)] = (0, 0, 0)
cv2.imshow('33', img)
cv2.imwrite('noise.jpg', img)
cv2.waitKey(0)
13.对小猫图像进行裁剪
from skimage import io,data
img=data.chelsea()
roi=img[70:150,130:220,:]
io.imshow(roi)
14.对像素点进行操作
img[i,:] = img[j,:] # 将第 j 行的数值赋值给第 i 行
img[:,i] = 100 # 将第 i 列的所有数值设为 100
img[:100,:50].sum() # 计算前 100 行、前 50 列所有数值的和
img[50:100,50:100] # 50~100 行,50~100 列(不包括第 100 行和第 100 列)
img[i].mean() # 第 i 行所有数值的平均值
img[:,-1] # 最后一列
img[-2,:] (or img[-2] ) # 倒数第二行