Python 在给定一定比例的情况下,如何调整图像的大小?

Python 在给定一定比例的情况下,如何调整图像的大小?,python,python-3.x,image,opencv,image-processing,Python,Python 3.x,Image,Opencv,Image Processing,我的目录中有许多不同大小的图像,但是我想按一定的比例调整它们的大小,比如说0.25或0.2,它应该是一个变量,我可以从代码中控制,我希望生成的图像是另一个目录中的输出 我研究了前一个问题提供的方法 但它缺少很多细节,例如:如何将这些大小转换回图像,使用哪些库等等 编辑:查看更多文档img.resize看起来很理想(虽然我也注意到了.缩略图),但我找不到像我这样的案例的合适例子。您可以创建自己的小程序来调整图片大小并重新保存图片: import cv2 def resize(oldPath,ne

我的目录中有许多不同大小的图像,但是我想按一定的比例调整它们的大小,比如说0.25或0.2,它应该是一个变量,我可以从代码中控制,我希望生成的图像是另一个目录中的输出

我研究了前一个问题提供的方法

但它缺少很多细节,例如:如何将这些大小转换回图像,使用哪些库等等


编辑:查看更多文档img.resize看起来很理想(虽然我也注意到了.缩略图),但我找不到像我这样的案例的合适例子。

您可以创建自己的小程序来调整图片大小并重新保存图片:

import cv2

def resize(oldPath,newPath,factor): 
    """Resize image on 'oldPath' in both dimensions by the same 'factor'. 
    Store as 'newPath'."""
    def r(image,f):
        """Resize 'image' by 'f' in both dimensions."""
        newDim = (int(f*image.shape[0]),int(f*image.shape[1]))
        return cv2.resize(image, newDim, interpolation = cv2.INTER_AREA)

    cv2.imwrite(newPath, r(cv2.imread(oldPath), factor)) 
然后像这样测试它:

# load and resize (local) pic, save as new file (adapt paths to your system)
resize(r'C:\Pictures\2015-08-05 10.58.36.jpg',r'C:\Pictures\mod.jpg',0.4)
# show openened modified image
cv2.imshow("...",cv2.imread(r'C:\Users\partner\Pictures\mod.jpg'))
# wait for keypress for diplay to close
cv2.waitKey(0)
您应该添加一些错误处理,例如:

  • 给定路径上没有图像
  • 图像不可读(文件路径权限)
  • 图像不可写(文件路径权限)

如果你看这个问题,这个人使用opencv(
cv2
)的方法。例如,
img2=cv2.resize(img,(new_w,new_h))
在回答这个问题所花的时间里,我能够写出我的解决方案,但由于付出的努力,我会接受这个答案。然而,结果是模糊的,这是正常的,它可以被修复吗?请参考我的回答,您选择PIL-图像的
。ANTIALIAS
是一个调整大小的参数,它“导致”模糊。请参阅和您可以提供的选项。使用
PIL.Image.BICUBIC
PIL.Image.LANCZOS
代替。你能把我的答案编辑成理想的答案吗?因为我发现它比你的答案要简单一点,请把它作为你的答案发布给我,并让我接受,提前谢谢。不,你自己试试看;)您可以在48小时后选择自己的答案作为解决方案。太晚了:)。再次感谢
# load and resize (local) pic, save as new file (adapt paths to your system)
resize(r'C:\Pictures\2015-08-05 10.58.36.jpg',r'C:\Pictures\mod.jpg',0.4)
# show openened modified image
cv2.imshow("...",cv2.imread(r'C:\Users\partner\Pictures\mod.jpg'))
# wait for keypress for diplay to close
cv2.waitKey(0)
from PIL import Image


ratio = 0.2
img = Image.open('/home/user/Desktop/test_pic/1-0.png')
hsize = int((float(img.size[1])*float(ratio)))
wsize = int((float(img.size[0])*float(ratio)))
img = img.resize((wsize,hsize), Image.ANTIALIAS)
img.save('/home/user/Desktop/test_pic/change.png')