您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
   
 
     
   
 订阅
  捐助
python数字图像处理--包的安装、读取、显示和简单处理
 
作者:Carrie代码晴
249 次浏览 评价:  
 2020-9-22 
 
编辑推荐:
这篇文章主要介绍了python数字图像处理之高级形态学处理 , 希望对您的学习有所帮助。
本文来自于csdn,由火龙果软件Alice编辑,推荐。

一,前期安装:

选择skimage包,里面提供了io模块,用来图片的输入输出

我的Windows由于TensorFlow环境关系,安装了python3.7.1和3.6两个版本,IDLE spyder同样,因此这里我就都给安装了。

【1】3.7.1的skimage安装

功能键+R,打开窗口,再打开CMD命令行窗口

用pip安装:pip install skimage

系统提示,install scikit-iamge,说明这个是完整的名

pip install scikit-image---安装成功

验证:进入python环境,import skimage

这样,skimage模块就装好了

【2】tf下安装

同样,先进入命令行,不过需要输入activate tf,进入tf环境下

至此,两个python里面都可以导入skimage了。

二,数字图像的读取和显示

代码解释见注释~~

在3.6版本运行中发现,只能对图片进行读取,但是无法显示,应该是windows和这个包不兼容的原因,因此后续的操作全部用python3.7.1处理。

1.彩色图片

from skimage import io #导入skimage包里面的io模块
imag=io.imread('C:/Users/Ruan Qing/Desktop/python基础--刘老师/20190412/示例图片2.jpg')
#读入:调用imread函数,参数为图片路径,return为矩阵
io.imshow(imag) #调用imshow函数,参数为读入的数组,return为图像

2.灰白图片

from skimage import io #导入skimage包里面的io模块
imag_grey=io.imread('C:/Users/Ruan Qing/Desktop/python基础--刘老师/20190412/示例图片2.jpg',as_grey=True)
#读入:调用imread函数,参数为图片路径,return为矩阵
io.imshow(imag_grey) #调用imshow函数,参数为读入的数组,return为图像

三,变量栏介绍

1.彩色图片

【1】右边的value显示的是色彩值:0代表黑色,255代表白色,最大就是255,0-255一共256个数,是2的8次方

【2】双击size打开的是一个表格

下拉进度条:行可以拖到4200,对应像素的size,列:0 1 2表示RGB三通道,颜色区域的每一个值(253)表示的是像素的颜色

2.灰白图片

【1】size只有两部分(2245,4200),分别是图片的行和列

【2】因为灰色,所以value值也变小,接近零

【3】注意:数据的类型是uint8还是float与size无关,即:对于unit8而言,是图片读入和读出的最终形式,可以是单层,即imag0那样,没有通道,是灰色;也可以是三层,即imag那样,有(行,列,3通道-RGB);对于folat而言,就是行和列。

当进行灰度处理:as_grey=True时,如果之前是uint8(三层彩色)会把图片type转为float,但如果本身是uint8(单层灰色),默认不会转,所以该操作无效。

四,图片像素的剪裁和访问

1.基础知识

图片读入程序中后,是以numpy数组存在的。因此对numpy数组的一切功能,对图片也适用。对数组元素的访问,实际上就是对图片像素点的访问。

彩色图片访问方式为:img[i,j,c]

i表示图片的行数,j表示图片的列数,c表示图片的通道数(RGB三通道分别对应0,1,2)。坐标是从左上角开始。

灰度图片访问方式为:gray[i,j]

2.操作

【1】对图片进行截取


from skimage import io
imag=io.read('C:/Users/Ruan Qing/Desktop/python基础--刘老师/20190412/示例图片2.jpg')
image_part=imag[1000:2245,0:2000,:]
#截取的是左下角,彩色
io.imshow(image_part)

【2】对图片进行单通道显示

from skimage import io
imag=io.read('C:/Users/Ruan Qing/Desktop/python基础--刘老师/20190412/示例图片2.jpg')
image_R=imag[:,:,0]
#只显示R通道
io.imshow(image_R)

【3】将图片的GB(RG/RB)通道全部取零

from skimage import io
imag=io.read('C:/Users/Ruan Qing/Desktop/python基础--刘老师/20190412/示例图片2.jpg')
imag[:,:,1]=0
imag[:,:,2]=0
#GB通道的像素点值全部为零
io.imshow(imag)

~绿色

from skimage import io
imag=io.read('C:/Users/Ruan Qing/Desktop/python基础--刘老师/20190412/示例图片2.jpg')
imag[:,:,2]=0
imag[:,:,0]=0
#GB通道的像素点值全部为零
io.imshow(imag)

可以看到变量栏,R和B通道全部都是0

~蓝色

from skimage import io
imag=io.read('C:/Users/Ruan Qing/Desktop/python基础--刘老师/20190412/示例图片2.jpg')
imag[:,:,1]=0
imag[:,:,0]=0
#GB通道的像素点值全部为零
io.imshow(imag)

【4】查看并修改像素值

~查看

from skimage import io
imag=io.read('C:/Users/Ruan Qing/Desktop/python基础--刘老师/20190412/示例图片2.jpg')
pixel=imag[3,4,1]
print(pixel)
#im.show()对应的是显示图片,imag是一个数组,所以显示的是对应的值

#im.show()对应的是显示图片,imag是一个数组,所以显示的是对应的值

显示:253

~修改:随机添加500000个椒盐噪声

这里用到了numpy包里的random来生成随机数,randint(0,cols)表示随机生成一个整数,范围在0到cols之间。

用img[x,y,:]=255这句来对像素值进行修改,将原来的三通道像素值,变为255

from skimage import io
import numpy as np
#导入numpy模块
imag_noise=io.imread('C:/Users/Ruan Qing/Desktop/python基础--刘老师/20190412/示例图片2.jpg')
rows,cols,dims=imag_noise.shape
#赋值
for i in range(500000):
x=np.random.randint(0,rows)
y=np.random.randint(0,cols)
#整个图片区域内,像素点(行列相交的像素点)随机选中500000个,randint表示整数值
imag_noise[x,y,:]=255
#给这几个点附上白色(255),黑色是0
io.imshow(imag_noise)

显示:

【5】对图像进行旋转

~方法一:调用skimage里面的transform模块

from skimage import io,transform
image=io.imread('C:/Users/Ruan Qing/Desktop/python基础--刘老师/20190412/示例图片3.jpg')
io.imshow(image)
image_2=transform.rotate(image,90)#旋转90°
io.imshow(image_2)

注意:虽然imshow两次,但是最终我的python只显示了最后show的旋转后的图片,前面show出来的被覆盖了

~自己写代码:

from skimage import io
import numpy as np
image=io.imread('C:/Users/Ruan Qing/Desktop/python基础--刘老师/20190412/示例图片2.jpg',as_grey=True)
cols,rows=image.shape
im_r=np.zeros((rows,cols))
#初始化一个全部为0的数组
a=rows-1
for i in range(rows):
for j in range(cols):
im_r[i,j]=image[j,a]
a=a-1

io.imshow(im_r)

注意:这里面,需要设置as_grey=True,输出黑白图片,得到的图片类型为float64

如果不变成黑白,那么read出的图片格式为unit8-二进制,值的范围为0-255,但是创建的numpy数组为float64,范围为0-1,或-1,没有办法装入初始化的numpy数组中,所以程序会报错,如下

正确结果显示:

接着替换图片1.jpg

 
   
249 次浏览     评价: 订阅 捐助
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
最新课程计划
 
最新文章
简述Matplotlib
Python三维绘图--Matplotlib
Python数据清洗实践
PyTorch实战指南
Python爬虫与数据可视化
最新课程
Python应用开发最佳实践
Python+数据分析+tensorflow
Python 编程方法和应用开发
人工智能+Python+大数据
Python及数据分析
更多...   
成功案例
某通信设备企业 Python数据分析与挖掘
某银行 人工智能+Python+大数据
某领先数字地图提供商 Python数据分析与机器学习
北京 Python及数据分析
某金融公司 Python编程方法与实践培训
更多...