2020-1-12,关于resize的方法

一,img.resize() 函数的作用和用法

1,改变图片的尺寸


#encoding=utf-8
#author: walker
#date: 2014-05-15
#function: 更改图片尺寸大小
 
from PIL import Image
'''
filein: 输入图片
fileout: 输出图片
width: 输出图片宽度
height:输出图片高度
type:输出图片类型(png, gif, jpeg...)
'''
def ResizeImage(filein, fileout, width, height, type):
  img = Image.open(filein)
  out = img.resize((width, height),Image.ANTIALIAS) #resize image with high-quality
  out.save(fileout, type)
if __name__ == "__main__":
  filein = r'0.jpg'
  fileout = r'testout.png'
  width = 6000
  height = 6000
  type = 'png'
  ResizeImage(filein, fileout, width, height, type)

这个函数img.resize((width, height),Image.ANTIALIAS)
第二个参数:
Image.NEAREST :低质量
Image.BILINEAR:双线性
Image.BICUBIC :三次样条插值
Image.ANTIALIAS:高质量

2,上面是单个图片改变,针对数据集图片


from PIL import Image
import os.path
import glob
def convertjpg(jpgfile,outdir,width=1280,height=720):
    img=Image.open(jpgfile)   
    new_img=img.resize((width,height),Image.BILINEAR)   
    new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))
for jpgfile in glob.glob("E:/test/picture/12/*.jpg"):
    convertjpg(jpgfile,"E:/test/picture/111/")

涉及到的一个重要函数glob.glob()

返回某个文件夹下所有的jpg路径 

glob.glob(“E:/test/picture/文件名/*.jpg”)

二,resize五种方法

cv::resize函数有五种插值算法:最近邻双线性双三次基于像素区域关系兰索斯插值

1,最邻近差值

图像:3X3 的256级灰度图,也就是高为3个像素,宽也是3个像素的图像,每个像素的取值可以是 0-255

234 38 22

67 44 12

89 65 63

坐标

y|

 |

 |

 |

 0--------------------------------------------x
如果想把这副图放大为 4X4大小的图像,那么该怎么做呢?那么第一步肯定想到的是先把4X4的矩阵先画出来再说,好了矩阵画出来了,如下所示,当然,矩阵的每个像素都是未知数,等待着我们去填充(这个将要被填充的图的叫做目标图,Destination):

? ? ? ?

? ? ? ?

? ? ? ?

? ? ? ?

? ? ? ?

234 38 22 22

67 44 12 12

89 65 63 63

89 65 63 63

设原图为 u,v 目标图为 a,b 目标坐标为i,j 对应的坐标为x,y  原图/原图坐标

所以 i+u,j+v   注((i,j)为正整数 0<u,v<1 的小数) 灰度图的值就为f(i+u,j+v)

套公式:

srcX=dstX* (srcWidth/dstWidth) ,

srcY = dstY * (srcHeight/dstHeight)

原图的坐标了(0*(3/4),0*(3/4))=>(0*0.75,0*0.75)=>(0,0),

 如果(i+u, j+v)落在A区,即u<0.5, v<0.5

x=int(i*m/a+0.5)

y=int(j*n/b+0.5)

0 10 20 30

临近插值

0 5 10 15 20 25 30

最邻近元法计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状

这 种放大图像的方法叫做最临近插值算法

2,双线性插值

Q12 和 Q22 之间的插值R2 为二线性插值

 
在x方向进行线性插值

 

 在y方向进行线性插值

 P处处理像素值

 

猜你喜欢

转载自blog.csdn.net/qq_65356682/article/details/122457685
今日推荐