当前位置:   article > 正文

(超全)python图像处理详细解析(1)

python图像处理

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

2.图像灰度处理

#io模块提供了图像输入输出的功能
from skimage import io
#io.imread()函数读取图像文件,并将其以灰度图像的形式存储在变量img中

img = io.imread('iii.jpg',as_gray=True)
io.imshow(img)
io.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

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)
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

4.查看存储路径

#data_dir用于存储示例图像数据集的路径
from skimage import data_dir
print(data_dir)
  • 1
  • 2
  • 3

显示结果:
在这里插入图片描述

5.保存图片

使用io模块的imsave(fname,arr)函数来实现。第一个参数表示保存的路径和名称,第二个参数表示需要保存的数组变量。

from skimage import data,io
img = data.chelsea()
io.imshow(img)
io.imsave('D:\cat1.jpg',img)
  • 1
  • 2
  • 3
  • 4

保存图片的同时也起到了转换格式的作用。如果读取时图片格式为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())   #像素平均值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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)
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

8.显示红色单通道图片

from skimage import io,data
img = data.chelsea()
#提取红色通道
R=img[:,:,0]
io.imshow(R)
  • 1
  • 2
  • 3
  • 4
  • 5

提取蓝色通道数据: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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

10.高斯去噪

高斯模糊是一种常用的去除噪声的方法,通过对图像进行模糊处理来平滑图像,去除噪声。

先保存刚刚的椒盐去噪图片

io.imsave('D:\jycat1.jpg',img)
  • 1
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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

在这里插入图片描述

13.对小猫图像进行裁剪

from skimage import io,data
img=data.chelsea()
roi=img[70:150,130:220,:]
io.imshow(roi)
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

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]	)	 # 倒数第二行
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/950140
推荐阅读
相关标签
  

闽ICP备14008679号