【scipy 基础】--图像处理

SciPy库本身是针对科学计算而不是图像处理的,只是图像处理也包含了很多数学计算,

所以Scipy也提供了一个专门的模块ndimage用于图像处理。

ndimage模块提供的功能包括输入/输出图像、显示图像、基本操作(如裁剪、翻转、旋转等)、图像过滤(如去噪、锐化等)、图像分割、分类、特征提取以及注册/配准等任务。

这个模块支持多种图像格式的读取和写入,使得对图像的处理变得方便快捷。

1. 主要功能

虽然图像处理不是Scipy的主要目的,Scipy中也提供了70多个各类图像处理函数。

类别 主要函数 说明
过滤器 包含convolve等20多个函数 各类卷积和滤波相关的计算函数
傅立叶滤波器 包含fourier_ellipsoid等4个函数 多维椭球傅里叶,高斯傅里叶等滤波器
图像插值 包含affine_transform等8个函数 图像的反射变换,移动,旋转等相关函数
图像测量 包含center_of_mass等将近20个函数 计算图像几何特征的相关函数
形态学 包含binary_closing等20多个函数 图像的侵蚀,膨胀,二元开闭运算等等

图像处理底层函数专业性较强,下面结合图片演示一些比较直观的例子。

2. 边缘检测

图像边缘检测 在计算机视觉和图像处理中是非常重要的任务之一。
边缘是图像中像素值发生显著变化的地方,它可以提供有关图像的重要信息,例如物体的轮廓、边界等。

ndimage模块中提供了多种算法来检测边缘,下面演示三种不同的边缘检测算法的效果:

(示例中所用的图片是维基百科上找的一个python logo

2.1. sobel算法

python 复制代码
import matplotlib.pyplot as plt
import cv2
from scipy import ndimage

image = plt.imread("d:/share/python-logo.png")
# 图像灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用索贝尔边缘检测算法
name = "sobel"
edges = ndimage.sobel(gray)

# 显示原始图像和边缘检测结果
fig, ax = plt.subplots(1, 3, figsize=(8, 4))
ax[0].imshow(image)
ax[0].set_title("原始图像")
ax[1].imshow(gray, cmap="gray")
ax[1].set_title("灰度图像")
ax[2].imshow(edges, cmap="gray")
ax[2].set_title("边缘检测({}算法)".format(name))
plt.show()

2.2. prewitt算法

代码和上面的类似,不同的部分就下面两行。

python 复制代码
# 使用prewitt边缘检测算法
name = "prewitt"
edges = ndimage.prewitt(gray)

2.3. laplace算法

上面两种算法的效果看上去很类似,laplace算法的结果看上去比上面两种效果更好一些。

python 复制代码
name = "laplace"
edges = ndimage.laplace(gray)

3. 侵蚀和膨胀

侵蚀和膨胀是最基本的两种图像形态学操作,它们的作用用来增强目标特征。

仍然使用上面的python logo图片,演示侵蚀和膨胀的操作。

python 复制代码
import matplotlib.pyplot as plt
import cv2
from scipy import ndimage

image = plt.imread("d:/share/python-logo.png")
# 图像灰度化
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 图像侵蚀
structure = ndimage.generate_binary_structure(2, 2)
erosion = ndimage.binary_erosion(image, structure)

# 图像膨胀
dilation = ndimage.binary_dilation(image, structure)

# 显示原始图像、侵蚀图像和膨胀图像
fig, ax = plt.subplots(1, 3, figsize=(8, 4))
ax[0].imshow(image, cmap="gray")
ax[0].set_title("灰度图像")
ax[1].imshow(erosion, cmap="gray")
ax[1].set_title("图像--侵蚀")
ax[2].imshow(dilation, cmap="gray")
ax[2].set_title("图像--膨胀")
plt.show()

简单来说,侵蚀操作会扩张图像中黑色的区域,反之,膨胀操作会扩张图像中白色的区域。

直观上来看的话,侵蚀变 了,膨胀变了。

4. 总结

Scipy图像模块 本质上是把图像当作数组来处理,

虽然它不是专门的图像处理库,不过它处理速度很快,且和numpy等库结合紧密,

经常处理图像的朋友可以把它当成一个辅助的工具。

相关推荐
青 春 记 忆3 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO33 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO6 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白6 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲7 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)9 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机9 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor6929 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy10 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
月光船幽幽11 小时前
真实即粗糙,光滑是伪造
人工智能·python