数字图像处理:python实现图像像素的访问和裁剪(四)

图片读取到计算机中,是以numpy数组存在的。
numpy数组的所有功能对图片也适用。
对数组元素的访问就是对图片像素点的访问。

彩色图片访问方式
color_img[i,j,c]
i:图片的行数(width)
j:图片的列数(height)
c:图片的通道数(第几通道的意思,RGB三通道分别对应0, 1,2)
坐标是从左上角开始的。

灰度图片访问方式:
gray_img[i,j]
i:图片的行数(width)
j:图片的列数(height)

实验一:输出小猫图片的R通道中第10行20列的像素值

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

run result:
在这里插入图片描述
实验二:显示红色单通道图片
待完善。。。

# 显示红色单通道图片
from skimage import io,data
img = data.chelsea()
R_chanel = img[:,:,0]
io.imshow(R_chanel )

run result:
在这里插入图片描述
实验三:修改图片中的像素值:
对小猫这张图片随机添加椒盐噪声

# 对小猫图片随机添加椒盐噪声
from skimage import io,data
import numpy as np # numpy包里的random来生成随机数
img = data.chelsea()
# #随机生成5000个椒盐
rows,cols,dims = img.shape # 
for i in range(5000): # 进行5000次循环
    x = np.random.randint(0,rows) # # randint(0,rows)表示随机生成一个整数,范围在0到rows之间
    y = np.random.randint(0,cols) # randint(0,cols)表示随机生成一个整数,范围在0到cols之间
    img[x,y,:] = 255 # 对像素值进行修改,将原来的三通道像素值,变为255 
io.imshow(img)

run result:
在这里插入图片描述
实验四:对图片进行裁剪:
例如,对skimage中自带的猫咪图片进行裁剪

###### 通过对数组的裁剪,就可以实现对图片的裁剪
from skimage import io,data
img = data.chelsea()
res_img = img[30:180,80:220,:] # 60到180行(width),100到220列(height),所有通道
io.imshow(res_img)

run result:
在这里插入图片描述
对多个像素点进行操作,使用数组切片方式访问。

img[i,:] = im[j,:] # 将第 j 行的数值赋值给第 i 行

img[:,i] = 200 # 将第 i 列的所有数值设为 200

img[:100,:60].sum() # 计算前 100 行、前 60 列所有数值的和

img[50:200,50:100] # 50~200 行,50~100 列(不包括第 200 行和第 100 列)

img[i].mean() # 第 i 行所有数值的平均值

img[:,-1] # 最后一列

img[-2,:] (or im[-2]) # 倒数第二行

实验五:将小猫图片进行二值化

##将chelsea图片进行二值化,最终将像素值大于128的变为1,否则变为0
from skimage import io,data,color
img = data.chelsea()
io.imshow(img)
# color模块的rgb2gray()函数,将彩色三通道图片转换成灰度图。转换结果为float64类型的数组,范围为[0,1]之间。
img_gray = color.rgb2gray(img) # [0,1]
io.imshow(img_gray)

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)

run result:
在这里插入图片描述
补充:

from skimage import io,data
img = data.chelsea()
temp_red = img[:,:,0]>160 # 先对R通道的所有像素值进行判断,如果大于160,
img[temp_red ] = [0,255,0] # 则将这个地方的像素值变为[0,255,0], 即G通道值为255,R和B通道值为0
io.imshow(img)

run result:
在这里插入图片描述

参考和引用:
https://blog.csdn.net/denny2015/article/details/50522987
仅用来个人学习和分享,如若侵权,留言立删。

尊重他人知识产权,不做拿来主义者!

喜欢的可以关注我哦QAQ,

你的关注和喜欢就是我write博文的动力。

good luck!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器不学习我学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值