Python图像处理常用代码记录——持更

文章目录

    • 1.1 PIL
    • 1.2 Matplotlib
    • 1.3 NumPy
    • 1.4 SciPy
    • 1.5 图像显示

1.1 PIL

PIL是图像处理类库,实现基本的图像操作,其中最重要的模块是Image

#调用Image
from PIL import Image          
pil_im = Image.open('empire.jpg')   #打开图片
#转为灰度图
pil_im = Image.open('enpire.jpg').convert('L')  
#法二:
import cv2
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#转换图片格式
for infile in filelist:
    outfile = os.path.splitext(infile)[0] + ".jpg"  #转为JPEG格式
    if infile != outfile:
        try:
            image.open(infile).save(outfile)
        except IOError:
            print "cannot convert",infile    #转换不成功时,报错
#创建边长为128像素的缩略图
pil_im.thumbnail((128,128))
#裁剪指定区域
m = (100,100,400,400)      #(左,上,右,下)
region = pil_im.crop(m)
#图像复制粘贴
region = region.transpose(Image.ROTATE_180)
pil_im.paste(region,m)
#调整图像大小
out = pil_im.resize((128,128))
#法二:
import cv2
img=cv2.resize(img,(224,224),interpolation=cv2.INTER_CUBIC)
#逆时针旋转图像
out = pil_rotate(45)

1.2 Matplotlib

Matplotlib用于绘制图表,其中PyLab接口包含很多方便用户创建图像的函数

from pylab import *
im = arry(Image.open('empire.jpg'))   #读取图像到数组中
#用红色形状标记绘制点
x = [1,1,4,4]
y = [2,5,2,5]
plot(x,y,'r*')  #默认是蓝色实线  #颜色、线型等同于matlab的定义方法
#绘制连接前两个点的线
plot(x[:2],y[:2])
#显示轮廓信息
contour(im,origin='image')
#绘制直方图
hist(im.flatten(),128)   #hist只接受一维数组作为输入  #flatten()将任意数组按照行优先准则转换成一维数组
#ginput()实现交互式标注
x = ginput(3) #用户在绘图窗口区域点击三次
print 'you clicked:',x #程序将点击的坐标[x,y]自动保存在x列表里

1.3 NumPy

NumPy是Python科学计算工具包,比如数组对象、矩阵乘积、转置、解方程系统、向量乘积和归一化等,NumPy中的数组对象是多维的,可以用来表示向量、矩阵和图像。

from numpy import*
#图像数组
im = array(Image.open('empire.jpg').convert('L'),'f')

创建对象时指定数据类型,否则数据类型会按照数据的类型自动确定。

#灰度变换
im2 = 255 - im    #图像求反
im3 = (100.0/255)*im + 100   #图像像素值变换到100~200之间
im4 = 255.0*(im/255.0)**2  #图像像素值求平方,使得较暗的像素值变得更小
#formarray()是array()的反操作
pil_im = Image.fromarray(unit8(im))  #数据类型转换为unit8
#图像缩放
def imresize(im,sz):
    pil_im = Image.formarray(unit8(im))
    return array(pil_im.resize(sz))
#直方图均衡化
im2,cdf = imtools.histeq(im)
#图像平均
def compute_average(imhist):
    averageim = array(Image.open(imhist[0]),'f')
    for imname in imhist[1:]:
        try:
            averageim += array(Image.open(imname))
        except:
            print imname + '...skipped'
        averageim /= len(imlist)
        return array(averageim,'unit8')

1.4 SciPy

SciPy是用于数值运算的开源工具包,可实现数值积分、优化、统计、信号处理和图像处理功能。

from scipy.ndimage import filters
#高斯模糊
im2 = filters.gaussian_filter(im,5)  #灰度图的模糊
im2[:,:,i] = filters.gaussian_filter(im[:,:,i],5)   #对单个颜色通道进行高斯模糊
#Sobel导数滤波器
imx = zeros(im.shape)
filters.sobel(im,1,imx)    #x方向导数

imy = zeros(im.shape)
filters.sobel(im,0,imy)    #y方向导数

magnitude = sqrt(imx**2+imy**2) 
#高斯滤波
sigma = 5
filters.gaussian_filter(im,(sigma,sigma),(0,1),imx)
filters.gaussian_filter(im,(sigma,sigma),(1,0),imy)
from scipy.ndimage import measurements,morphology
#morphology可实现形态学操作
#measurements实现二值图像的计数和度量功能
im_open = morphology.binary_opening(im,ones((9,5)),iteration=2)#开操作
labels_open,nbr_objects_open = measurements.label(im_open) 
#读写.mat文件
data = scipy.io.loadmat('test.mat')
#以图像形式保存数组
from scipy.misc import imsave
imsave('test.jpg',im)

1.5 图像显示

import cv2                 
cv2. imshow("original",img)      
cv2.waitKey(0)
cv2.destroyAllWindows()  #弹出图像
import matplotlib.pyplot as graph
graph.subplot(131)
graph.xlabel("original")
graph.xticks([])
graph.yticks([])
graph.imshow(img)
graph.show()                #图像显示在页面上
from matplotlib import pyplot as plt
plt.figure(figsize=(10,8),dpi=80)
plt.subplot(121)
plt.imshow(img)
plt.xlabel("原图像",fontproperties='SimHei')
plt.xticks([])                #去掉x轴坐标
plt.yticks([])                #去掉y轴坐标
plt.show()                    #图像显示在页面上

你可能感兴趣的:(Python,计算机视觉,python,opencv,计算机视觉)