Python计算机视觉编程学习笔记

第一章:基本的图像处理操作和处理

1.1PIL:Python图像处理类库

读取并转换格式

from PIL import  Image
pil_im=Image.open("linyuner.jpg")
pil_im=Image.open("linyuner.jpg").convert('L')
#转化为灰度图

读取所有图像文件,并转换成JPEG格式

from PIL import  Image
import os
path="filelist"
for infile in filelist:
    outfile=os.path.splitext(infile)[0]+".jpg"
    #分离文件名与扩展名
    if infile !=outfile:
        try:
            Image.open(infile).save(outfile)
        except IOError:
            print("can't convert",infile)
            
def get_imlist(path):
    """"返回目录中所有jpg图像的文件名列表"""
    return [os.path.join(path,f) for f in os.listdir(path) if f.endswith(".jpg")]

创建缩略图

pil_im.thumbnail((128,128))

剪裁指定区域

box=(100,100,400,400)
#四个角坐标,图像左上角为(0,0)
region=pil_img.crop(box)

逆时针旋转region,然后放回去

region=region.transpose(Image.ROTATE_180)
pil.im.paste(region,box)

调整尺寸和旋转

out=pil_im.resize((128,128))
out=pil_im.rotate(45)

Matplotlib

图像中绘制点和线

from PIL import Image
from pylab import *
im=array(Image.open('linyuner.jpg'))
imshow(im)
x=[100,100,400,400]
y=[200,500,200,500]
plot(x,y,'r*')
plot(x[:2],y[:2])
title('Plotting:"linyunerjpg"')
#axis('off')
#坐标轴不显示
show() 

Python计算机视觉编程学习笔记_第1张图片
图像轮廓和直方图

from PIL import Image
from pylab import *
im=array(Image.open('linyuner.jpg').convert('L'))
figure()
gray()
contour(im,origin="image")
axis('equal')
axis('off')
figure()
hist(im.flatten(),128)
show()

交互式标注

from PIL import Image
from pylab import *
im=array(Image.open('linyuner.jpg'))
imshow(im)
print'Please click 3 points')
x= ginput(3)
print'you clicked:',x)
show()

Numpy

图像数组表示

from PIL import Image
from pylab import *
im=array(Image.open('linyuner.jpg'))
print(im.shape,im.dtype)
im=array(Image.open('linyuner.jpg').convert('L'),'f')
print(im.shape,im.dtype)
value=im[i,j,k]
im[i,:]=im[j,:]#将第j行的数值赋值给第i行
im[:,i]=100#将第i列的所有数值设为100
im=[:100,:50].sum()#计算前100行、前50列所有数值的和
im[50:100,50:100]#50~100行,50~100列(不包括第100行和第100列)
im[i].mean()#第i行所有数值的平均值
im[:,-1]#最后一列
im[-2:]#倒数第二行

灰度变换

from PIL import Image
from pylab import *
im=array(Image.open("linyuner.jpg").convert('L'))
im2=255-im
im3=(100.0/255)*im+100
im4=255*(im/255.0)**2
pil_im=Image.fromarray(uint(im2))
#将数据类型转换回来
imshow(pil_im)
show()

图像缩放
定义图像缩放函数,不确定输入类型,安全起见,先转换成uint8

def imresize(im,sz):
    pil_im=Image.fromarray(uint8(im))
    return array(pil_im.resize(sz))

直方图均衡化

#author=MingChaoSun
from PIL import Image

from pylab import *

#读取图像到数组中,并灰度化
im = array(Image.open('linyuner.jpg').convert('L'))

#绘制原始直方图
subplot(231)

hist(im.flatten(),256)

#计算图像直方图(每个bins数组的区间值对应一个imhist数组中的强度值)
imhist,bins = histogram(im.flatten(),256,normed=True)

#计算累积分布函数
cdf = imhist.cumsum()

#累计函数归一化(由0~1变换至0~255)
cdf = cdf*255/cdf[-1]

#绘制累计分布函数
subplot(232)

plot(bins[:256],cdf)

#依次对每一个灰度图像素值(强度值)使用cdf进行线性插值,计算其新的强度值
#interp(x,xp,yp) 输入原函数的一系列点(xp,yp),使用线性插值方法模拟函数并计算f(x)
im2 = interp(im.flatten(),bins[:256],cdf)

#将压平的图像数组重新变成二维数组
im2 = im2.reshape(im.shape)

# 显示均衡化之后的直方图图像
subplot(233)

hist(im2.flatten(),256)

#显示原始图像
gray()

subplot(234)

imshow(im)

#显示变换后图像
subplot(236)

imshow(im2)

show()

你可能感兴趣的:(计算机视觉编程笔记)