图像处理的一些操作(1)

图像处理

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创建两个子图

分别显示归一化前和归一化后的灰度图像

运行结果:

相关推荐
数据智能老司机23 分钟前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机23 分钟前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机24 分钟前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i34 分钟前
drf初步梳理
python·django
每日AI新事件34 分钟前
python的异步函数
python
这里有鱼汤2 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook11 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室11 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三13 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试
用户25191624271116 小时前
Python之语言特点
python