python数字图像处理--包的安装、读取、显示和简单处理

一,前期安装:

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

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

【1】3.7.1的skimage安装

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

python数字图像处理--包的安装、读取、显示和简单处理_第1张图片python数字图像处理--包的安装、读取、显示和简单处理_第2张图片

☞用pip安装:pip install skimage

python数字图像处理--包的安装、读取、显示和简单处理_第3张图片

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

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

☞验证:进入python环境,import skimage

这样,skimage模块就装好了

【2】tf下安装

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

 python数字图像处理--包的安装、读取、显示和简单处理_第4张图片

至此,两个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为图像

python数字图像处理--包的安装、读取、显示和简单处理_第5张图片

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为图像

python数字图像处理--包的安装、读取、显示和简单处理_第6张图片

三,变量栏介绍

1.彩色图片

python数字图像处理--包的安装、读取、显示和简单处理_第7张图片

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

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

python数字图像处理--包的安装、读取、显示和简单处理_第8张图片

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

2.灰白图片

python数字图像处理--包的安装、读取、显示和简单处理_第9张图片

【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)

python数字图像处理--包的安装、读取、显示和简单处理_第10张图片

【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)

 

python数字图像处理--包的安装、读取、显示和简单处理_第11张图片

【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)

python数字图像处理--包的安装、读取、显示和简单处理_第12张图片

 

  ~绿色

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)

 

python数字图像处理--包的安装、读取、显示和简单处理_第13张图片

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

python数字图像处理--包的安装、读取、显示和简单处理_第14张图片

~蓝色

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)

 

python数字图像处理--包的安装、读取、显示和简单处理_第15张图片

【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是一个数组,所以显示的是对应的值

 显示: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)   

显示:

python数字图像处理--包的安装、读取、显示和简单处理_第16张图片

【5】对图像进行旋转

python数字图像处理--包的安装、读取、显示和简单处理_第17张图片 原图

~方法一:调用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)

 

python数字图像处理--包的安装、读取、显示和简单处理_第18张图片

注意:虽然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数组中,所以程序会报错,如下 

python数字图像处理--包的安装、读取、显示和简单处理_第19张图片

正确结果显示: 

python数字图像处理--包的安装、读取、显示和简单处理_第20张图片

 

接着替换图片1.jpg

python数字图像处理--包的安装、读取、显示和简单处理_第21张图片

显示的是 

 

你可能感兴趣的:(python数字图像处理--包的安装、读取、显示和简单处理)