Python数字图像处理:像素访问与裁剪实战

周叙
周叙
发布时间:2026-10-15| 5人浏览过
原创

本文详解Python中如何访问和修改图像像素。通过skimage库读取图片为NumPy数组,讲解彩色与灰度图的索引方式,演示随机添加椒盐噪声、图像裁剪、二值化及通道判断等具体操作,帮助开发者掌握基础像素级处理技巧。

引言

将图片加载至程序后,其数据以NumPy数组形式存储。因此,针对NumPy数组的所有功能同样适用于图像数据。访问数组元素即等同于访问图像的像素点。

对于彩色图像,其访问语法如下:

img[i,j,c]

其中,i代表图像的行索引,j代表列索引,c代表通道索引(分别对应0、1、2,对应RGB三通道)。坐标原点位于图像左上角。

对于灰度图像,访问方式更为简化:

gray[i,j]

示例1:获取小猫图像G通道第20行、第30列的像素值

from skimage import io,data
img=data.chelsea()
pixel=img[20,30,1]
print(pixel)

输出结果为129

示例2:显示红色单通道图像

from skimage import io,data
img=data.chelsea()
R=img[:,:,0]
io.imshow(R)

除了读取像素,还可以直接修改像素值。

示例3:向小猫图像随机添加椒盐噪声

from skimage import io,data
import numpy as np
img=data.chelsea()

#随机生成5000个椒盐
rows,cols,dims=img.shape
for i in range(5000):
    x=np.random.randint(0,rows)
    y=np.random.randint(0,cols)
    img[x,y,:]=255
    
io.imshow(img)

此处利用NumPy库中的random模块生成随机数。randint(0,cols)用于生成0到cols范围内的随机整数。

通过语句img[x,y,:]=255修改像素值,将原有的三通道像素值统一设置为255。

利用数组切片功能,即可实现图像的裁剪操作。

示例4:对小猫图像进行裁剪

from skimage import io,data
img=data.chelsea()
roi=img[80:180,100:200,:]
io.imshow(roi)

对多个像素点进行操作时,可采用数组切片方式访问。切片方式返回的是按指定间隔下标访问的数组像素值。以下是关于灰度图像的一些示例:

img[i,:] = im[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 im[-2]) # 倒数第二行

最后,再展示两个关于像素值访问与修改的示例:

示例5:对Lena图像进行二值化处理

像素值大于128的设为1,否则设为0。

from skimage import io,data,color
img=data.lena()
img_gray=color.rgb2gray(img)
rows,cols=img_gray.shape
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)

本例使用了color模块的rgb2gray()函数,将彩色三通道图像转换为灰度图。转换后的结果是一个float64类型的数组,数值范围在[0,1]之间。

示例6:判断R通道所有像素值

from skimage import io,data
img=data.chelsea()
reddish = img[:, :, 0] >170
img[reddish] = [0, 255, 0]
io.imshow(img)

该示例首先判断R通道的所有像素值,若大于170,则将该位置像素值修改为[0,255,0],即G通道值为255,R和B通道值为0。

以上为Python数字图像处理中像素访问与裁剪的详细内容,更多关于Python数字图像处理像素访问裁剪的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。