Python常用对图像的简单操作

在Python中,用于做图像处理的常用库有matplotlib, PIL, OpenCV。下面将对其进行一一介绍:

一、matplotlib

matplotlib操作方式类似于matlab,我本人较为喜欢的图像处理库。

1.显示图片

import matplotlib.pyplot as plt  #用于显示的类
import matplotlib.image as mpimg  #用于读取图片的类
lena = mpimg.imread('example1.jpg')  #输出的是ndarray类型,un
rows = lena.shape[0]  #图片的rows
cols = lena.shape[1]  #图片的cols
print(rows, cols)
plt.imshow(lena)     #显示图片
plt.axis('off')      #不显示坐标轴
plt.show()           #输出


2.显示图像某个区域与通道的信息

import matplotlib.pyplot as plt   
import matplotlib.image as mpimg
lena = mpimg.imread('example1.jpg')
lena_1 = lena[:200,:300,0]   # 横向0-200,纵向0-300,R通道数值(0为R,1为G,2为B)
plt.subplot(121)
plt.imshow(lena_1)  #显示的是伪彩色的热力图
plt.subplot(122)
plt.imshow(lena_1, cmap='Greys_r')    #显示真实灰色图
plt.show()

3.将RGB转换成灰度图

import matplotlib.pyplot as plt     
import matplotlib.image as mpimg
import numpy as np     #与
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from scipy import misc
import numpy as np
lena = mpimg.imread('example1.jpg')
#缩小
lena_new_d = misc.imresize(lena, 0.5)  #第二个参数如果是小数,则为百分比,如果是tuple,则为输出图像的尺寸
#放大
lena_new_u = misc.imresize(lena, 2.0)  #注意这里的2.0要写小数形式,如果写整数意味着原始图像尺寸乘以2%
plt.subplot(121)
plt.imshow(lena_new_d)
plt.subplot(122)
plt.imshow(lena_new_u)
#保存matplotlib画出的图像
plt.savefig('lena_new_sz.jpg')
#直接保存array
np.save('lena_new_d', lena_new_d)
np.save('lena_new_u', lena_new_u)
#将array保存为图像
misc.imsave('lena_new_d.jpg', lena_new_d)
misc.imsave('lena_new_u.jpg', lena_new_u)
#直接保存
plt.show()

矩阵运算相关的类def rgb2gray(rgb): return np.dot(rgb[...,:3], [0.299, 0.587, 0.114]) #对应RGB位置的点乘lena = mpimg.imread('example1.jpg')gray = rgb2gray(lena)plt.imshow(gray, cmap='Greys_r')plt.axis('off')plt.show()

4.对图像进行缩放并保存

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from scipy import misc
import numpy as np
lena = mpimg.imread('example1.jpg')
#缩小
lena_new_d = misc.imresize(lena, 0.5)  #第二个参数如果是小数,则为百分比,如果是tuple,则为输出图像的尺寸
#放大
lena_new_u = misc.imresize(lena, 2.0)  #注意这里的2.0要写小数形式,如果写整数意味着原始图像尺寸乘以2%
plt.subplot(121)
plt.imshow(lena_new_d)
plt.subplot(122)
plt.imshow(lena_new_u)
#保存matplotlib画出的图像
plt.savefig('lena_new_sz.jpg')
#直接保存array
np.save('lena_new_d', lena_new_d)
np.save('lena_new_u', lena_new_u)
#将array保存为图像
misc.imsave('lena_new_d.jpg', lena_new_d)
misc.imsave('lena_new_u.jpg', lena_new_u)
#
plt.show()

5.读取上面保存的数组

import matplotlib.pyplot as plt
import numpy as np
img1 = np.load('lena_new_d.npy')
img2 = np.load('lena_new_u.npy')
plt.subplot(121)
plt.imshow(img1)
plt.subplot(122)
plt.imshow(img2)
plt.show()

二、PIL

PIL是python里标准的图像处理库,可以对显示后的图像进行多种可视化处理操作。

1.显示图片

from PIL import Image            #调用PIL类
im = Image.open('example2.jpg')  #输出JpegImageFile形式
im.show()

鼠标左键图像窗口显示对其进行图像处理的commands

2.将PIL转换为numpy数组

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
im = Image.open('example2.jpg')
im_array = np.array(im)
plt.imshow(im_array)
plt.show()

3.保存PIL图片

from PIL import Image
im = Image.open('example2.jpg')
im.save('exam2.jpg')

4.将numpy数组转换为PIL类

import matplotlib.image as mping
from PIL import Image
import numpy as np
lena = mping.imread('example2.jpg')
im = Image.fromarray(np.uint8(lena))
im.show()

5.RGB图像转换成灰度图

from PIL import Image
I = Image.open('example2.jpg')
L = I.convert('L')
L.show()

3、OpenCV

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,其提供了Python等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。本人用opencv3.3.0版本。OpenCV+Python3.6开发环境配置见链接:点击打开链接

1.读取图片

import cv2    #调用opencv有关类
im = cv2.imread('example3.jpg')  #输出为ndarray类,dtype=uint8
rows = im.shape[0]
cols = im.shape[1]
print(rows, cols)
cv2.namedWindow('img1', 1)
cv2.imshow('img1', im)
cv2.waitKey(0)

2.将OpenCV类转换为numpy类型(虽然两者输出格式同为ndarray,但因为RGB片排列方式不同,则需要对矩阵进行

数学意义上的转换)

import cv2
import matplotlib.pyplot as plt
import numpy as np
im = cv2.imread('example3.jpg')
rows = im.shape[0]
cols = im.shape[1]
im_np = np.zeros([rows, cols, 3], 'uint8')   #构建与im相同大小与类型的矩阵
# cv2中矩阵的第三维度数值从0-2一次对应图像的B通道,G通道,R通道
# 而在matplotlib.image中的0-2对应图像的R通道,G通道,B通道
im_np[:,:,0] = im[:,:,2]
im_np[:,:,1] = im[:,:,1]
im_np[:,:,2] = im[:,:,0]
plt.subplot(121)
plt.imshow(im)
plt.subplot(122)
plt.imshow(im_np)
plt.axis("off")
plt.show()

OpenCV类型转换为IPL的方法同二中的4小节。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值