我将缓慢放大的图像粘贴到循环内的固定大小背景上,以创建图像的平滑视频,从而减慢放大速度。
然而,由于我的浮动值必须在图像调整大小之前转换为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
答案 0 :(得分:1)
避免抖动的一种方法是在一次扩展和下一次扩展之间取平均值。例如,如果图像仅在帧1,4,7,10等上以px大小增加,则在帧1上我们渲染图像1,并且在帧2上,我们渲染66%图像1和33%图像4,并且在帧3上我们渲染33%的图像1和66%的图像4,在第4帧我们渲染图像4.这使得运动不那么清晰。
这只是一种方法,但重点是:我们只能以离散像素为单位增加图像尺寸,因此在像素之间创建渐变的唯一方法是混合传出和传入的颜色。