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

2024-04-27 05:04

本文主要是介绍(超全)python图像处理详细解析(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图像处理

    • 15.对图片进行二值化
    • 16.图像归一化
    • 17.阈值分割
        • 1.
        • 2.
        • 3.
        • 4.
    • 18.图像数据类型及转换
      • 1.unit8转float
      • 2.float转unit8
    • 19.颜色空间及其转换
      • rgb转灰度图:
      • rgb转hsv
      • 对图片着色
    • 20. imshow()图像的绘制
    • 21.用figure函数和subplot函数分别创建主窗口与子图
    • 22.对图像进行批量处理
        • 1.
        • 2.

15.对图片进行二值化

from skimage import io,data,color
img=io.imread('iii.jpg')
#将彩色图像转换为灰度图像
img_gray=color.rgb2gray(img)
#获取灰度图像的行数和列数
rows,cols=img_gray.shape
#对图像的每一行进行迭代。
for i in range(rows):
#对图像的每一列进行迭代。
for j in range(cols):
#检查当前像素的灰度值是否小于等于0.5。if (img_gray[i,j]<=0.5):
#如果是,将当前像素的值设置为0。img_gray[i,j]=0else:img_gray[i,j]=1
io.imshow(img_gray)
#使用了color模块的rgb2gray()函数,将彩色三通道图片转换成灰度图。转换结果为float64类型的数组,范围为[0,1]之间。

在这里插入图片描述

16.图像归一化

1、线性归一化:将图像的像素值线性映射到[0, 1]范围内。这是最常见的归一化方法,也是最简单的方法之一。

normalized_image = (image - np.min(image)) / (np.max(image) - np.min(image))

2、均值方差归一化:将图像的像素值减去均值后,除以标准差,使得图像的均值为0,标准差为1。这样可以降低图像数据的偏差和差异性。
代码如下:

import numpy as np
#image为array类型,多少维度都无所谓,直接操作全部元素
image = (image - np.min(image)) / (np.max(image) - np.min(image))

3、直方图均衡化:通过重新分布图像像素的直方图,增强图像的对比度和细节。这在图像增强和图像识别等领域非常有用。

from skimage import exposure
equalized_image = exposure.equalize_hist(image)

三、图像归一化的应用场景
计算机视觉:在计算机视觉中,图像归一化可以用于预处理图像数据,以提高分类、检测和识别算法的准确性和稳定性。
图像增强:通过归一化,我们可以增强图像的对比度、亮度和细节,使图像更加清晰和鲜明。
图像分析:在图像分析中,图像归一化可以帮助我们去除图像之间的差异,使得图像数据更易于比较和分析。

from skimage import io, color
import numpy as np# 读取图像
image = io.imread('image.jpg')# 获取图像的像素值范围
min_val = np.min(image)
max_val = np.max(image)# 归一化图像
normalized_image = (image - min_val) / (max_val - min_val)# 显示归一化后的图像
io.imshow(normalized_image)
io.show()

在这里插入图片描述

17.阈值分割

1.
from skimage import io,data
img=io.imread('iii.jpg')
#其中对于图像中的每个像素,如果红色通道的值大于170,则对应位置为True,否则为False。
reddish = img[:, :, 0] >170
# 将图像中红色通道值大于170的像素改为纯红色,即将红色通道设为255,绿色通道和蓝色通道设为0。
img[reddish] = [255, 0, 0]
io.imshow(img)

在这里插入图片描述

2.
from skimage import io,data
img=io.imread('iii.jpg')
reddish = img[:, :, 0] >170
#图像中红色通道值大于170的像素改为纯绿色,即将红色通道和蓝色通道设为0,绿色通道设为255。
img[reddish] = [0,255, 0]
io.imshow(img)

在这里插入图片描述

3.
from skimage import io,data
img=io.imread('iii.jpg')
reddish = img[:, :, 0] >170
#将图像中红色通道值大于170的像素改为纯蓝色,即将红色通道和绿色通道设为0,蓝色通道设为255。
img[reddish] = [0, 0, 255]
io.imshow(img)

在这里插入图片描述

4.
from skimage import io,data
img=io.imread('iii.jpg')
#对于图像中的每个像素,如果绿色通道的值大于170,则对应位置为True,否则为False。
reddish = img[:, :, 1] >170
#将图像中绿色通道值大于170的像素改为灰色,即将红色、绿色和蓝色通道的值都设为50。
img[reddish] = [50, 50, 50]
io.imshow(img)

在这里插入图片描述

18.图像数据类型及转换

在skimage中,一张图片就是一个简单的numpy数组,数组的数据类型有很多种,相互之间也可以转换。这些数据类型及取值范围如下表所示:

Data typeRange
uint80 to 255
uint160 to 65535
uint320 to 232
float-1 to 1 or 0 to 1
int8-128 to 127
int16-32768 to 32767
int32-231 to 231 - 1
#从scikit-image库中导入io和data模块,这些模块包含了图像I/O和一些示例图像的功能。
from skimage import io,data
#导入PyTorch库,用于深度学习任务。
import torch
#从scikit-image库中导入resize函数,用于调整图像大小。
from skimage.transform import resize
#从matplotlib库中导入pyplot模块,用于绘制图像和图表。
from matplotlib import pyplot as plt
#读取图像
img=io.imread('iii.jpg')
#使用resize函数将图像大小调整为(200, 200)
img = resize(img,(200,200))
# print("Before normalize: \n",img)#建立画布
#创建一个新的图形窗口。
fig = plt.figure()
#在图形窗口中添加一个子图,1行2列的布局,当前子图为第1个。
a=fig.add_subplot(1,2,1)
#显示调整大小后的图像img。
plt.imshow(img)
a.set_title('Before')
#打印图像数据类型的名称
print(img.dtype.name)#定义一个包含均值的列表,用于归一化图像数据。
mean=[0.485, 0.456, 0.406]
#定义一个包含标准差的列表,用于归一化图像数据。
std=[0.229, 0.224, 0.225]#将图像数据img转换为PyTorch的FloatTensor类型。
img = torch.FloatTensor(img)
#创建一个与图像大小相同的张量,其中每个像素的均值都设置为mean
mean = torch.FloatTensor(200*[200*[mean]])
#创建一个与图像大小相同的张量,其中每个像素的标准差都设置为std
std = torch.FloatTensor(200*[200*[std]])
#对图像数据进行归一化处理,即减去均值mean并除以标准差std。
img = (img - mean) / std# print("After normalize: \n",img)
#在图形窗口中添加一个子图,1行2列的布局,当前子图为第2个。
a = fig.add_subplot(1, 2, 2)
#设置当前子图的标题为'After'。
a.set_title("After")
plt.imshow(img)
plt.show() 

在这里插入图片描述

1.unit8转float

from skimage import io, img_as_floatimg = io.imread('mao.jpg')
print(img.dtype.name)
# print(img)
#将图像img转换为浮点数类型,并将结果存储在变量dst中。
dst = img_as_float(img)
print(dst.dtype.name)io.imshow(dst)
#显示转换后的浮点数类型图像dst。
# print(dst)

在这里插入图片描述

2.float转unit8

from skimage import io,data,img_as_ubyte
import numpy as np
#创建一个包含0、0.5和1的NumPy数组,数据类型为浮点数。
img = np.array([0,0.5,1],dtype=float)
# io.imshow(img)
print(img.dtype.name)
print(img)
#将浮点数数组img转换为无符号字节类型,并将结果存储在变量dst1中。
dst1=img_as_ubyte(img)
print(dst1.dtype.name)
print(dst1)

在这里插入图片描述

19.颜色空间及其转换

除了直接转换可以改变数据类型外,还可以通过图像的颜色空间转换来改变数据类型。
常用的颜色空间有灰度空间、rgb空间、hsv空间和cmyk空间。颜色空间转换以后,图片类型都变成了float型。
所有的颜色空间转换函数,都放在skimage的color模块内。
RGB颜色空间有:(红red 绿green 蓝blue)三原色:取值范围都是:[0,255],[0,255],[0,255]
HSV:
H (Hue)色相:[0,360]
S (Saturation)饱和度,即色彩纯净度,0饱和度为白色
V (Value/Brightness):明度 0明度为纯黑色
在OpenCV中,颜色范围:
H = [0,179]
S = [0,255]
V = [0,255]
Lab:颜色之间的欧式距离有具体含义–距离越大,人眼感官两种颜色差距越远
L 通道:像素亮度,上白下黑 中间灰
a 通道:左绿 右红
b 通道:一端纯蓝,一端纯黄

rgb转灰度图:

from skimage import io, color
img = io.imread('mao.jpg')
gray_img = color.rgb2hsv(img)
io.imshow(gray_img)

在这里插入图片描述
其他转换:
在这里插入图片描述
在这里插入图片描述

rgb转hsv

用一个函数来代替上面的函数

skimage.color.convert_colorspace(arr, fromspace, tospace)
其中tospace必须是dict_key之一([‘rgb’,‘hsv’,‘rgb-cie’,‘xyz’,‘yuv’,‘yiq’,‘ypbpr’,‘ycbcr’,‘ydbdr’])

表示将img从RGB颜色空间转换到yuv颜色空间。

from skimage import io, color
img = io.imread('mao.jpg')
hsv=color.convert_colorspace(img,'RGB','yuv')
io.imshow(hsv)

在这里插入图片描述

对图片着色

将图片分成三类,然后用默认颜色对三类进行着色

from skimage import io, color
import numpy as np
img = io.imread('mao.jpg')
gray = color.rgb2hsv(img)  #颜色空间转换
rows,cols=gray.shape[0],gray.shape[1]  #提取行数(高度)和列数(宽度)
#创建了一个与图像大小相同的零数组labels,用于存储后续的标签信息。
labels=np.zeros([rows,cols])for i in range(rows):for j in range(cols):if(gray[i,j,2]<0.4):labels[i,j]=1  #如果亮度小于0.4,标签被设置为1elif(gray[i,j,2]<0.75):labels[i,j]=1  #如果亮度小于0.75,标签也被设置为1else:labels[i,j]=2  #否则,标签被设置为2
#将标签数组转换为彩色图像,将不同的标签值转换为不同的颜色,通常用于可视化图像分割的结果。dst=color.label2rgb(labels)  
io.imshow(dst)

在这里插入图片描述

20. imshow()图像的绘制

imshow()函数格式为:
matplotlib.pyplot.imshow(X, cmap=None)
X: 要绘制的图像或数组。
图像数据。支持的数组形状是:
(M,N) :带有标量数据的图像。数据可视化使用色彩图。
(M,N,3) :具有RGB值的图像(float或uint8)。
(M,N,4) :具有RGBA值的图像(float或uint8),即包括透明度。
前两个维度(M,N)定义了行和列图片,即图片的高和宽;
RGB(A)值应该在浮点数[0, …, 1]的范围内,或者
整数[0, … ,255]。超出范围的值将被剪切为这些界限。

cmap: 颜色图谱(colormap), 默认绘制为RGB(A)颜色空间。

颜色图谱描述
autumn红-橙-黄
bone黑-白,x线
cool青-洋红
copper黑-铜
flag红-白-蓝-黑
gray黑-白
hot黑-红-黄-白
hsvhsv颜色空间, 红-黄-绿-青-蓝-洋红-红
inferno黑-红-黄
jet蓝-青-黄-红
magma黑-红-白
pink黑-粉-白
plasma绿-红-黄
prism红-黄-绿-蓝-紫-…-绿模式
spring洋红-黄
summer绿-黄
viridis蓝-绿-黄
winter蓝-绿
import matplotlib.pyplot as plt
img = io.imread('mao.jpg')
plt.imshow(img,cmap=plt.cm.bone)

在这里插入图片描述
上图类型显示matplotlib.image.AxesImage,显示一张图片,我们还可以这样写:

import matplotlib.pyplot as plt
from skimage import io,data
img=io.imread('mao.jpg')
plt.imshow(img)
plt.show()

matplotlib是一个专业绘图的库,相当于matlab中的plot,可以设置多个figure窗口,设置figure的标题,隐藏坐标尺,甚至可以使用subplot在一个figure中显示多张图片。

21.用figure函数和subplot函数分别创建主窗口与子图

在图片绘制过程中,我们用matplotlib.pyplot模块下的figure()函数来创建显示窗口,该函数的格式为:

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None)

所有参数都是可选的,都有默认值,因此调用该函数时可以不带任何参数,其中:

num: 整型或字符型都可以。如果设置为整型,则该整型数字表示窗口的序号。如果设置为字符型,则该字符串表示窗口的名称。用该参数来命名窗口,如果两个窗口序号或名相同,则后一个窗口会覆盖前一个窗口。

figsize: 设置窗口大小。是一个tuple型的整数,如figsize=(8,8)

dpi: 整形数字,表示窗口的分辨率。

facecolor: 窗口的背景颜色。
edgecolor: 窗口的边框颜色。

用figure()函数创建的窗口,只能显示一幅图片,如果想要显示多幅图片,则需要将这个窗口再划分为几个子图,在每个子图中显示不同的图片。我们可以使用subplot()函数来划分子图,函数格式为:
matplotlib.pyplot.subplot(nrows, ncols, plot_number)
nrows: 子图的行数。
ncols: 子图的列数。
plot_number: 当前子图的编号。

import cv2
import matplotlib.pyplot as plt
from skimage import data
img=io.imread('mao.jpg')
#创建了一个新的matplotlib窗口,并将其命名为’astronaut’。窗口的大小被设置为8x8。
plt.figure(num='astronaut',figsize=(8,8))
#分割为三个独立的颜色
r, g, b = cv2.split(img)
#2x2的子图布局,选择第一个子图
plt.subplot(2,2,1)
plt.title('1')
plt.imshow(img)plt.subplot(2,2,2)
plt.title('2')
plt.imshow(r)plt.subplot(2,2,3)
plt.title('3')
plt.imshow(b)plt.subplot(2,2,4)
plt.title('4')
plt.imshow(g)

在这里插入图片描述

22.对图像进行批量处理

这个函数是放在io模块内的,带两个参数,第一个参数load_pattern, 表示图片组的路径,可以是一个str字符串。第二个参数load_func是一个回调函数,我们对图片进行批量处理就可以通过这个回调函数实现。回调函数默认为imread(),即默认这个函数是批量读取图片。

1.
import skimage.io as io
from skimage import data_dir
#将data_dir与通配符*和.png结合起来
str = data_dir+'/*.png'
#使用io.ImageCollection类创建了一个集合,该集合包含所有匹配文件匹配模式的文件
coll = io.ImageCollection(str)
#打印了coll的长度,即其中包含的图像数量
print(len(coll))
#显示coll中的第7张图像
io.imshow(coll[6])
io.show()

在这里插入图片描述

2.

对批量图片转成灰度图像

from skimage import data_dir,io,color
def convert_gray(f):rgb=io.imread(f)return color.rgb2gray(rgb)
str = data_dir+'/*.png'
coll = io.ImageCollection(str,load_func=convert_gray)
io.imshow(coll[8])

在这里插入图片描述

这篇关于(超全)python图像处理详细解析(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/939586

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

OWASP十大安全漏洞解析

OWASP(开放式Web应用程序安全项目)发布的“十大安全漏洞”列表是Web应用程序安全领域的权威指南,它总结了Web应用程序中最常见、最危险的安全隐患。以下是对OWASP十大安全漏洞的详细解析: 1. 注入漏洞(Injection) 描述:攻击者通过在应用程序的输入数据中插入恶意代码,从而控制应用程序的行为。常见的注入类型包括SQL注入、OS命令注入、LDAP注入等。 影响:可能导致数据泄

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动