如何使用Python PIL中的浮点像素大小来缩放图像

时间:2017-11-29 14:56:50

标签: python image python-imaging-library

我将缓慢放大的图像粘贴到循环内的固定大小背景上,以创建图像的平滑视频,从而减慢放大速度。

然而,由于我的浮动值必须在图像调整大小之前转换为int,因此我找不到放大图像的方法来增加像素之间的内容,这会产生抖动效果,其中图像每3或4帧按比例缩放高度和宽度分别与平滑抗锯齿比例相对应,其中可以使用“在像素之间”,并且无论增量有多小(如3D游戏中的纹理),都可以逐帧进行缩放。

while currentFrame < (fbi - blendingFrames):
    #Slight zoom based on position
    zoomPosition = -(((fbi - blendingFrames - currentFrame) / framesbetweenImages)) + 1 #Creates value from 0 - 1 
    zoomScaleH = height+((height/20)*zoomPosition) #divide by height
    zoomScaleW = width+((width/20)*zoomPosition) #divide by width

    #converting to int here means some frames show no size increase
    img_w, img_h = int(zoomScaleW), int(zoomScaleH)
    outputimageZoomPaste = outputimageZoom.resize((img_w, img_h), Image.ANTIALIAS)

    offsetZ = ((width - img_w) // 2, (height - img_h) // 2)

    # Paste centered on to fixed size bk image #
    outputimage.paste(outputimageZoomPaste, offsetZ)

    #write frame to video
    video.write(cv2.cvtColor(np.array(outputimage), cv2.COLOR_RGB2BGR))
    currentFrame += 1

1 个答案:

答案 0 :(得分:1)

避免抖动的一种方法是在一次扩展和下一次扩展之间取平均值。例如,如果图像仅在帧1,4,7,10等上以px大小增加,则在帧1上我们渲染图像1,并且在帧2上,我们渲染66%图像1和33%图像4,并且在帧3上我们渲染33%的图像1和66%的图像4,在第4帧我们渲染图像4.这使得运动不那么清晰。

这只是一种方法,但重点是:我们只能以离散像素为单位增加图像尺寸,因此在像素之间创建渐变的唯一方法是混合传出和传入的颜色。