图像处理
- 1.安装PIL,skimage库
- 2.读取图像文件
-
- 2.1读取图像文件
- [2.2 以灰度模式读取图像](#2.2 以灰度模式读取图像)
- [2.3 查看示例图像的目录路径](#2.3 查看示例图像的目录路径)
- [2.4 读取chelsea图片](#2.4 读取chelsea图片)
- [2.5 加载示例图片并保存](#2.5 加载示例图片并保存)
- [2.6 获得加载图片的信息](#2.6 获得加载图片的信息)
-
- [2.6.1 输出图片类型](#2.6.1 输出图片类型)
- [2.6.2 输出图片尺寸](#2.6.2 输出图片尺寸)
- [2.6.3 输出图片宽度](#2.6.3 输出图片宽度)
- [2.6.4 输出图片高度](#2.6.4 输出图片高度)
- [2.6.5 输出图片通道数](#2.6.5 输出图片通道数)
- [2.6.6 输出图片总像素个数](#2.6.6 输出图片总像素个数)
- [2.6.7 输出图片最大像素值](#2.6.7 输出图片最大像素值)
- [2.6.8 输出图片最小像素值](#2.6.8 输出图片最小像素值)
- [2.6.9 输出图片所有像素值平均值](#2.6.9 输出图片所有像素值平均值)
- 3.使用切片操作提取通道
- 4.给图片添加椒盐噪声
-
- 4.1提升图像维度
- [4.2 添加随机噪声](#4.2 添加随机噪声)
- 4.3显示修改后的图像
- [5. 给图片去掉椒盐噪声](#5. 给图片去掉椒盐噪声)
-
- 5.1高斯模糊
- [5.3 中值滤波](#5.3 中值滤波)
- 5.2图像切片
- 5.3特定区域像素值
- 6.二值化图像
-
- 6.1导入color模块
- [6.2读取图像 转成灰度](#6.2读取图像 转成灰度)
- 6.3遍历循环
- 7.改变通道值
-
- [7.1 [0, 255, 0]](#7.1 [0, 255, 0])
- [7.2 [6, 25, 60]](#7.2 [6, 25, 60])
- [7.3 [25, 25, 25]](#7.3 [25, 25, 25])
- [8. 图像归一化](#8. 图像归一化)
1.安装PIL,skimage库
1.1导入skimage库中的oi模块和data模块
io模块提供了用于读取和保存图像的函数,而data模块包含了一些实力图像供我们使用
python
from skimage import io,data
2.读取图像文件
2.1读取图像文件
使用io.Imread函数读取该图片,并加载到名为img的变量中。
python
img=io.imread(r"C:\Users\song\Desktop\1.jpg")
io.imshow(img)
io.show()
运行结果:
2.2 以灰度模式读取图像
使用io.Imread函数以灰度模式读取该图片,并加载到名为img的变量中。
python
img=io.imread(r"C:\Users\song\Desktop\1.jpg",as_gray=True)
io.imshow(img)
运行结果:
2.3 查看示例图像的目录路径
data_dir 是 skimage 库中的一个变量,它存储了示例图像的目录路径。通常情况下,这个路径指向 skimage 库内部的示例图像文件夹。这个文件夹包含了一些常用的示例图像,供用户在实验和测试时使用。
python
from skimage import data_dir
print(data_dir)
运行结果:
2.4 读取chelsea图片
使用了skimage 库中的data 和idata dir 、模块。首先,通过data.chelsea()方法读取了 Lena 图片,然后通过io.imread()方法结合datadir 路径读取了同样的 Lena 图片。这两种方法都用于加载 Lena 图片,只是一种是直接通过 data 模块获取示例图片,另一种是通过拼接路径的方式获取示例图片。
python
from skimage import data_dir,data,io
img1=data.chelsea() # 读取chelsea图片
img2=io.imread(data_dir+'/chelsea.png') # 读取chelsea图片
2.5 加载示例图片并保存
使用skimage库中的io.save()函数将加载的示例图像img保存到指定路径(imsave()函数会将图像以PNG格式保存到指定路径)
io.show()函数显示先前用io.imshow()加载的图像
python
from skimage import io,data
img=data.chelsea()
io.imshow(img)
io.show()
io.imsave(r"E:\工坊\chelsea.png",img)
运行结果:
2.6 获得加载图片的信息
用于获取图片的属性和统计信息
python
from skimage import io,data
img=data.chelsea()
io.imshow(img)
2.6.1 输出图片类型
输出<class 'numpy.ndarray'>
python
print(type(img)) # 显示类型
运行结果:
2.6.2 输出图片尺寸
示例图像:(高度,宽度,通道数)
彩色图像:3(红、绿、蓝)
python
print(img.shape) # 显示尺寸
运行结果:
(300,451,3)
2.6.3 输出图片宽度
python
print(img.shape[0]) # 图片宽度
运行结果:
300
2.6.4 输出图片高度
python
print(img.shape[1]) # 图片高度
运行结果:
451
2.6.5 输出图片通道数
python
print(img.shape[2]) # 图片通道数
运行结果:
3
2.6.6 输出图片总像素个数
即宽度乘通道数
python
print(img.size) # 显示总像素个数
运行结果:
405900
2.6.7 输出图片最大像素值
python
print(img.max()) # 显示最大像素值
运行结果:
231
2.6.8 输出图片最小像素值
python
print(img.min()) # 显示最小像素值
运行结果:
0
2.6.9 输出图片所有像素值平均值
python
print(img.mean()) #显示像素平均值
运行结果:
115.30514166050752
3.使用切片操作提取通道
在numpy数组中,索引[0]表示红色通道,索引[1]表示绿色通道,索引[2]表示蓝色通道
3.1提取红色通道
python
red_channel = img[:, :, 0]
io.imshow(red_channel)
io.show()
运行结果:
3.2提取绿色通道
python
green_channel = img[:, :, 1]
io.imshow(green_channel)
io.show()
运行结果:
3.3提取蓝色通道
python
blue_channel = img[:, :, 2]
io.imshow(blue_channel)
io.show()
运行结果:
4.给图片添加椒盐噪声
4.1提升图像维度
rows代表行数,cols代表列数字,dims代表颜色通道数
python
rows,cols,dims=img.shape
4.2 添加随机噪声
对加载的图片进行随机位置(x,y)设置为白色的操作。
python
for i in range(5000): #循环5000次
x = np.random.randint(0,rows)
y = np.random.randint(0,cols)
img[x,y,:]=255
4.3显示修改后的图像
python
io.imshow(img)
运行结果:
5. 给图片去掉椒盐噪声
5.1高斯模糊
python
import cv2
# 读取图像
image = cv2.imread(r"C:\Users\song\Desktop\2.jpg")
# 高斯模糊
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
# 显示处理后的图像
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
5.3 中值滤波
python
import cv2
# 读取图像
image = cv2.imread(r"C:\Users\song\Desktop\2.jpg")
# 中值滤波
blurred_image = cv2.medianBlur(image, 5)
# 显示处理后的图像
cv2.imshow("Median Blurred Image", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
5.2图像切片
加载图像
python
from skimage import io, data
img = io.imread(r"C:\Users\song\Desktop\3.jpg")
io.imshow(img)
运行结果:
显示图像指定区域
python
from skimage import io,data
img = io.imread(r"C:\Users\song\Desktop\3.jpg")
song = img[300:600,130:350,:]
io.imshow(song)
运行结果:
5.3特定区域像素值
5.3.1计算特定区域像素值
通过两层循环遍历图像的每个像素位置,计算[:100, :50]内像素值的总和。
python
height, width = img.shape[0], img.shape[1]
for i in range(height):
for j in range(width):
region_sum = img[:100, :50].sum()
print(region_sum)
运行结果:
6.二值化图像
6.1导入color模块
color模块
python
from skimage import color
6.2读取图像 转成灰度
python
img_gray=color.rgb2gray(img)
rows,cols=img_gray.shape
6.3遍历循环
python
for i in range(rows):
for j in range(cols):
if (img_gray[i,j]<=0.5):
img_gray[i,j]=0
else:
img_gray[i,j]=1
io.imshow(img_gray)
运行结果:
7.改变通道值
7.1 [0, 255, 0]
找到原始图像中红色通道数大于170的像素,并将这些像素的颜色修改成绿色。
python
from skimage import color
img = io.imread(r"C:\Users\song\Desktop\1.jpg")
reddish = img[:, :, 0] >170
img[reddish] = [0, 255, 0]
io.imshow(img)
运行结果:
7.2 [6, 25, 60]
找到原始图像中红色通道数大于170的像素,并将这些像素的颜色修改成深蓝色。
运行结果:
7.3 [25, 25, 25]
找到原始图像中红色通道数大于170的像素,并将这些像素的颜色修改成灰色。
运行结果:
8. 图像归一化
8.1导入模块
从skimage库中导入io和color模块,同时从matplotlib.pyplot中导入plt模块
python
from skimage import io, color
import matplotlib.pyplot as plt
8.2RGB图像转灰度图像
python
img = io.imread(r"C:\Users\song\Desktop\1.jpg")
gray = color.rgb2gray(img)
8.3计算灰度图像的最小值和最大值
python
mn = gray.min()
mx = gray.max()
norm = (gray - mn) / (mx - mn)
8.4打印图像
python
print('归一化前:')
print(gray)
print('归一化后:')
print(norm)
8.5创建两个子图
分别显示归一化前和归一化后的灰度图像
运行结果: