python图像处理:像素处理

利用Imgae.open()打开图像,再利用PIL对象进行操作。这样只是简单的处理,一旦操作复杂就比较困难。而像素级的处理与许多复杂操作相关。所以,通常我们在加载完图片后,都是把图片转换成矩阵来进行复杂操作。

一般情况,在pyton中进行数字图像处理,都需要导入这些包:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

打开并转换图像成矩阵,并显示:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('/home/keysen/caffe/examples/images/cat.jpg')) #打开图像并转化为数字矩阵
plt.figure('cat')
plt.imshow(img)
plt.axis('off')
plt.show()

调用numpy中的array()函数就可以将PIL对象转换为数组对象。图片信息:

print (img.shape)
print (img.dtype)
print (img.size)
print (type(img))

output

(360, 480, 3)
uint8
518400
< type ‘numpy.ndarray’ >

如果是RGB图片,那么转换为array之后,就变成了一个rows*cols*channels的三维矩阵,因此,我们可以使用img[i,j,k]来访问像素值。

示例1:打开图片,并随机添加一些椒盐噪声

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('/home/keysen/caffe/examples/images/cat.jpg')) #打开图像并转化为数字矩阵

#随机生成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

plt.figure("cat_salt")
plt.imshow(img)
plt.axis('off')
plt.show()

output

这里写图片描述

示例2:将图像二值化,像素值大于128的变为1,否则变为0

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('/home/keysen/caffe/examples/images/cat.jpg').convert('L')) #打开图像并转化为数字矩阵

rows,cols=img.shape
for i in range(rows):
    for j in range(cols):
        if (img[i,j]<=128):
            img[i,j]=0
        else:
            img[i,j]=1

plt.figure("cat_black&white")
plt.imshow(img,cmap='gray')
plt.axis('off')
plt.show()

output

这里写图片描述

如果要对多个像素点进行操作,可以使用数组切片方式访问。切片方式返回的是以指定间隔下标访问该数组的像素值。下面是有关灰度图像的一些例子:

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]) # 倒数第二行
  • 16
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python图像处理技术的难点主要包括以下几个方面: 1. 图像格式转换:在图像处理中,经常需要将图像从一种格式转换为另一种格式,例如将JPEG格式的图像转换为PNG格式。这涉及到对图像数据的解码和编码操作,以及处理不同格式之间的差异。 2. 图像尺寸改变:改变图像的大小尺寸是图像处理中常见的操作之一。这涉及到对图像进行缩放或放大,并保持图像的质量和比例。在改变图像尺寸时,需要考虑到图像的长宽比例以及图像的像信息。 3. 图像裁剪:裁剪图像是指从原始图像中截取出感兴趣的部分。这需要确定裁剪的位置和大小,并进行相应的像操作。在裁剪过程中,需要注意保持图像的完整性和准确性。 4. 滤镜处理:滤镜处理是一种常见的图像处理技术,用于改变图像的外观和效果。例如,可以应用模糊、锐化、边缘检测等滤镜来增强图像的特定特征。滤镜处理涉及到对图像进行像级别的操作和计算。 5. 图像处理算法:图像处理算法是实现各种图像处理功能的核心。例如,边缘检测、图像分割、图像增强等算法都是图像处理中常用的技术。这些算法需要对图像进行数学计算和分析,并结合适当的图像处理工具进行实现。 以上是Python图像处理技术中的一些难点,通过学习和实践,可以逐渐掌握这些技术并应用于实际项目中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值