本文,介绍一下,用python实现的图片变形,还要介绍一下,图片变形之后,对图片像素进行插值的方法。原图如下。
工具/原料
1
电脑
2
python3.6(Anaconda)
3
opencv模块
方法/步骤
1
给出图片,并读取图片的形状:import cv2,numpy as npimg = cv2.imread('0.png')a,b,c = img.shape
2
对图片进行变形,把原图的{i,j}变为{3*i+j,i+2*j}。所以,需要求出新图片的大小:for i in range(a): for j in range(b): A.append(int(3*i+j)) B.append(int(i+2*j))d = max(A)e = max(B)
3
创建一个宽为e+1、高为d+1的绿色图片img0:img0 = np.zeros((d+1,e+1,3))img0[:,:] = [0,255,0]
4
用顺向插值的方法,把img的像素{i,j}放到img0的{3*i+j,i+2*j}上面:for i in range(a): for j in range(b): img0[int(3*i+j),int(i+2*j)]=img[i,j]
5
用逆向插值的方法,对img0的{i,j},用img的{(8*i-3*j)/5,(-4*i+9*j)/5}赋值:for i in range(d): for j in range(e): if (2*i-j)/5=0 and (3*j-i)/5=0: img0[i,j]=img[int((2*i-j)/5),int((3*j-i)/5)]
6
逆向插值的效果,明显好于——顺向插值。