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

    技术2022-07-11  123

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

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

    图像轮廓和直方图

    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()
    Processed: 0.014, SQL: 9