-
2020-12-03 00:48:42
Python批量更改图片分辨率
# -*- coding: utf-8 -*-
import Image
import glob, os
#图片批处理
def timage():
for files in glob.glob('~/pic/*.JPG'):
filepath,filename = os.path.split(files)
filterame,exts = os.path.splitext(filename)
#输出路径
opfile = r'~/pic/out/'
#判断opfile是否存在,不存在则创建
if (os.path.isdir(opfile)==False):
os.mkdir(opfile)
im = Image.open(files)
w,h = im.size
#im_ss = im.resize((400,400))
#im_ss = im.convert('P')
im_ss = im.resize((int(w*0.12), int(h*0.12)))
im_ss.save(opfile+filterame+'.jpg')
if __name__=='__main__':
timage()
print u'坤子提醒您,批量图片处理完成' 本文由
坤子的blog 原创
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
更多相关内容 -
python 实现图片像素大小设置
2018-10-29 16:27:06python 实现图片像素大小设置,可以实现图像的任意大小输出。 -
使用PIL调整图片分辨率
2021-01-15 03:01:54需求:因项目需求中有对照片分辨率的具体要求,需要进行已有照片的批量分辨率处理。已有照片统一为1024*768分辨率,要求处理成320*240 / 240*200两种分辨率形式。难点:对方要求中的240*200分辨率大小与我们已有照片...需求:
因项目需求中有对照片分辨率的具体要求,需要进行已有照片的批量分辨率处理。已有照片统一为1024*768分辨率,要求处理成320*240 / 240*200两种分辨率形式。
难点:
对方要求中的240*200分辨率大小与我们已有照片分辨率不是同一个比例的。
解决方案:
如果直接resize(240,200)后,结果必要会存在变形的情况,那么需要考虑对目标进行裁剪。方法是先按较大的边进行等比例压缩,压缩后再根据目标比例选取中间区域进行裁剪。
# -*- coding:utf-8 -*-
"""批量调整照片大小
"""
__author__ = fatway
__email__ = fatway#gmail.com
VERSION = "Photo Resizer v1.0 build 2010-8-25"
import os
import sys
import time
import glob
import Image
class PicResizer:
"""根据指定的目录,对该目录下的所有照片进行大小调整
"""
def __init__(self, picpath, bakpath):
'''初始化参数'''
self.picpath = picpath
self.bakpath = bakpath
logfile = bakpath + "/log" + time.strftime("%Y%m%d%H%M") + ".txt"
self.log = open(logfile, "a")
def pic_walker(self, path):
'''获取指定目录下的所有JPG照片,不递归深入查找'''
target = []
for files in glob.glob(path + "/*.jpg"):
filepath,filename = os.path.split(files) # todo: mark
target.append(filename)
return target
def check_folder(self, subFolderName):
'''检查目标文件夹是否存在,不存在则创建之'''
foldername = self.bakpath + '/' + subFolderName
print foldername
if not os.path.isdir(foldername):
os.mkdir(foldername)
#return 0
return foldername
def pic_info(self, img):
'''获取照片的尺寸'''
w, h = img.size
if w>h:
return w, h, 0 # 横版照片
else:
return w, h, 1 # 竖版照片
def comp_num(self, x, y):
'''比较两个实数
如果是用直接比较话会出现经典的整数除得0问题
'''
x = float(x)
y = float(y)
return float(x/y)
def pic_resize(self, picname, p_w, p_h):
'''根据设定的尺寸,对指定照片进行像素调整'''
# 获取指定照片的规格,一般是1024,768
img = Image.open(picname)
w, h, isVertical = self.pic_info(img)
# 判断照片横竖,为竖版的话对调w,h
if isVertical:
p_w, p_h = p_h, p_w
# 如果照片调整比例合适,直接输出
if self.comp_num(p_h, p_w) == self.comp_num(h, w):
target = img.resize(
(int(p_w), int(p_h)),
Image.ANTIALIAS # hack: 参数呐!高保真必备!
)
# ANTIALIAS: a high-quality downsampling filter
# BILINEAR: linear interpolation in a 2x2 environment
# BICUBIC: cubic spline interpolation in a 4x4 environment
return target
# 比例不合适就需要对照片进行计算,保证输出照片的正中位置
# 算法灵感来源于ColorStrom
if self.comp_num(p_h, p_w) > self.comp_num(h, w):
# 240/320 > 360/576 偏高照片的处理
# 以高为基准先调整照片大小
p_w_n = p_h * self.comp_num(w,h) # 根据新高按比例设置新宽
temp_img = img.resize(
(int(p_w_n), int(p_h)),
Image.ANTIALIAS
)
# 获取中间选定大小区域
c = (p_w_n - p_w)/2 # 边条大小
box = (c, 0, c+p_w, p_h) # 选定容器
box = tuple(map(int, box)) # 转换成crop需要的int形参数
target = temp_img.crop(box)
return target
else:
# 偏宽的照片
# 以宽为基准先调整照片大小
p_h_n = p_w * self.comp_num(h, w) # 根据新宽按比例设置新高
temp_img = img.resize(
(int(p_w), int(p_h_n)),
Image.ANTIALIAS
)
# 获取新图像
c = (p_h_n - p_h)/2
box = (0, c, p_w, c+p_h)
box = tuple(map(int, box))
target = temp_img.crop(box)
return target
def run_auto(self, *args):
'''运行调整照片尺寸进程
接纳规格列表,每个规格为一个tuple
'''
# 获取所有图片列表
imglist = self.pic_walker(self.picpath)
# 处理照片
for img in imglist:
imgfile = self.picpath + "/" + img # 完整照片名称
try:
for std in args:
w, h = std[0], std[1] # 获取目标照片规格
# 定义目标文件
opfile = self.check_folder(str(w)+"x"+str(h)) + "/" + img
tempimg = self.pic_resize(imgfile, int(w), int(h))
tempimg.save(opfile, 'jpeg')
#self.log.write(str(img) + "\tOK\n")
except:
self.log.write(str(img) + "\tErr\n")
print '-->' + img
print "Done."
def main():
'''主函数'''
# picpath = bakpath = raw_input("type your photo's path:")
# 修改源照片文件夹路径
picpath = "E:/BB_Exchange"
# 修改为你的目标路径
bakpath = "E:/BB_Exchange"
# 实例一个进程并运行
resizer = PicResizer(picpath, bakpath)
resizer.run_auto((320, 240),(240,200))
if __name__ == "__main__":
sys.exit(main())
-
python 降低图片分辨率的两种方法
2022-05-18 13:38:05方法1: from PIL import Image from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES = True Image.MAX_IMAGE_PIXELS = None ... :param filein: 输入图片 :param fileout: 输出图片 :param width: 输方法1:
# 降低图片分辨率 def ResizeImage(filein, fileout,width,height, scale=1): """ 改变图片大小 :param filein: 输入图片的文件夹路径 :param fileout: 输出图片的文件夹路径 :param width: 输出图片宽度 :param height: 输出图片宽度 :param type: 输出图片类型(png, gif, jpeg...) :return: """ allImage = os.listdir(filein) for image in allImage: img = Image.open(filein+"/"+image) type = img.format out = img.resize((int(width), int(height)), Image.ANTIALIAS) # 第二个参数: # Image.NEAREST :低质量 # Image.BILINEAR:双线性 # Image.BICUBIC :三次样条插值 # Image.ANTIALIAS:高质量 out.save(fileout+"/"+image, type)
方法2:
def change_size(input_path: str, output_dir: str, width: int, height: int): allImage = os.listdir(input_path) for image in allImage: try: image_path = input_path+"/"+image ext = os.path.basename(image_path).strip().split('.')[-1] if ext not in ['png', 'jpg']: raise Exception('format error') _result_path = os.path.join(output_dir, '{}.{}'.format(image[:-4], ext)) ff = FFmpeg(executable='D:/czc/ffmpeg-4.2-win-64/ffmpeg.exe',inputs={'{}'.format(image_path): None}, outputs={_result_path: '-vf scale={}:{}'.format(width, height)}) print(ff.cmd) ff.run() return _result_path except: print(image+"已转换") if __name__ == '__main__': png_path = D:/czc/png smallPng_path = D:/czc/smallPng width = 1280 height = 720 change_size(png_path,smallPng_path,width,height)
方法2在遇到过大的图片可能无法转换
-
使用numpy快速降低图像分辨率的Python代码
2020-12-03 00:48:42我首先要说的是,你的“只装箱”方式...如果您希望平滑调整大小的行为(例如,通过使用样条插值),您将看到Python图像库和所有在幕后使用它的函数,例如OpenCV,它也提供了summarized in this post的大小调整行为。在我首先要说的是,你的“只装箱”方式似乎很不寻常,我想这正是@ljetibo在评论中所指的。在“优化”讨论之后,我将回到这个话题。在
首先,您可以通过去掉对np.copy的多余调用来稍微改进代码,因为您只需将重新绑定到传入的img的视图。ravel操作将返回一个副本,除非图像形状是binning因子bin_fac的倍数。在
现在,虽然列表理解速度很快,但是您正在从一个可能不连续的列表中重新创建一个numpy数组,这意味着您要再次将内存从一个位置复制到另一个位置。这些都是消耗效率的操作。在
您可能感兴趣的是在原始图像上生成一个内存高效的视图。这就是as_strided的作用:from numpy.lib.stride_tricks import as_strided
def strided_rescale(g, bin_fac):
strided = as_strided(g,
shape=(g.shape[0]//bin_fac, g.shape[1]//bin_fac, bin_fac, bin_fac),
strides=((g.strides[0]*bin_fac, g.strides[1]*bin_fac)+g.strides))
return strided.mean(axis=-1).mean(axis=-1) # order is NOT important! See notes..
时序考虑表明,这通常比原始方法快一点,随着装箱因子的增加,性能得到改善:
^{2}$
我相信在数组相等性方面观察到的细微差异是由于复制操作,即从numpy数据类型返回到普通Python浮点,反之亦然。但我不能百分之百肯定。在
现在优化讨论已经结束,让我们回到您的binning方法。在当前的实现中,您已经将图像分割成正方形、不重叠的区域。在这个故事的其余部分,这些子矩阵不必是正方形的,它们可以是矩形的(如果图像的纵横比可以改变的话),并且结论仍然有效。所以,在每个子矩阵中,取行平均值,然后取结果列向量的平均值。很容易从数学上证明,这和取整个子矩阵的平均值是一样的。这是个好消息,因为这意味着在上面显示的strided_rescale函数中,您可以简单地将return语句替换为:return gstr.mean(axis=(-2,-1))
这将给你另一个(小)提速。在
我认为使用^{}是一个非常好的建议,直到我用一个dtype在ndarrays上尝试过了!= np.uint8公司. 即使如此,必须正确选择mode参数,并且它似乎只取子矩阵的左上角:In [39]: a = np.arange(16, dtype=np.uint8).reshape(4,4)
In [40]: a
Out[40]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]], dtype=uint8)
In [41]: imresize(a, (2,2), mode='P')
Out[41]:
array([[ 0, 2],
[ 8, 10]], dtype=uint8)
In [42]: imresize(a, (2,2), mode='L')
Out[42]:
array([[0, 1],
[6, 7]], dtype=uint8)
这可能不是你想要的。所以stride_技巧对实际的binning很有效。如果您希望平滑调整大小的行为(例如,通过使用样条插值),您将看到Python图像库和所有在幕后使用它的函数,例如OpenCV,它也提供了summarized in this post的大小调整行为。在
-
图像超分辨率_python_超分辨率技术_图像重建_超分辨率重建_图像超分辨
2021-09-10 18:52:072.将这组图片降低分辨率为一组图像Image23.通过各种神经网络结构,将Image2超分辨率重建为Image3(Image3和Image1分辨率一样)4.通过PSNR等方法比较Image1和Image3,验证超分辨率重建的效果,根据效果调节神经网络中的... -
Python修改图片分辨率来改变图片大小
2018-07-16 00:23:18在一些网上报名的时候,经常会遇到上传1寸图片,但是图片大小往往有限制,于是想用Python来实现让图片符合大小。 关于Pillow与PIL 可参考:https://blog.csdn.net/dcz1994/article/details/71642979 提供一个... -
python如何更改图像像素
2021-02-04 17:45:56在Python中,可以使用PIL图像处理库来更改图像像素。方法是:1、利用PIL的load函数导入图片;2、size方法获取宽和高度;3、利用getpixel方法获取图像的像素值,putpixel方法设置图像的像素值。在做语义分割项目时,... -
Python之修改图片像素值的方法
2020-12-03 00:48:42在做语义分割项目时,标注的图片不合标准,而且类型是RGBA型,且是A的部分表示的类别,因此需要将该图片转化为RGB图片# -*- coding:utf8 -*-import osfrom PIL import Imageim = Image.open('123.png')#打开图片pix ... -
[Python]改变图片的分辨率大小
2017-08-01 13:27:09第 0005 题:你有一个目录,装了很多照片,把它们的尺寸变成都...2.对于图片大小的处理,当大小超过iphone5的分辨率,进行等比例缩放。代码如下:#coding=utf-8 import os #打开文件时需要 from PIL import Image impor -
python 视频和图片转换 视频压缩 图片降低分辨率 图像处理
2021-11-23 20:14:47python 做视频后期单个视频转图片所有图片转视频视频压缩 - ffmpeg图片降低分辨率图像处理 这是最近无聊的想法,对视频进行处理,其实也就是对图片的处理。 对视频进行后期处理,思路就是,视频转图片,然后对图片... -
Python 批量修改图片分辨率
2021-02-15 16:55:48# 图片路径 # 使用 glob模块 获得文件夹内所有jpg图像 img_path = glob("./*.jpg") #存储(输出)路径 path_save = "./result" for i,file in enumerate(img_path): name = os.path.join(path_save, "%d.jpg"%i)... -
示例:opencv批量降低图片分辨率
2020-06-30 09:20:21要将100多张1920*1280分辨率的图片分辨率调整到1280*720分辨率 首先需要安装opencv ···shell pip install opencv ··· 然后修改图片分辨率 import cv2 import os curDir = os.curdir # 获取当前执行python文件... -
10.super pix图像清晰化(超级分辨率)python代码实现
2019-05-08 16:53:48super pix图像清晰化(超级分辨率)采用python语言编写程序实现 -
opencv-python数字图像处理学习2:对一张图像进行缩放,观察其分辨率,降低灰度分辨率两种模式,观察图像...
2021-10-11 20:53:04opencv-python,对图像进行缩放、降低灰度分辨率,观察图像变化一、在开始之前知识点、方法二、开始对一张图像进行缩放,观察其分辨率和图像变化使用cv2.resize缩放图像观察其分辨率和图像变化降低灰度分辨率,观察... -
Python-通过深度学习的图像超分辨率ImageSuperResolution
2019-08-11 06:52:10通过深度学习的图像超分辨率Image Super-Resolution -
降低DDS图像的分辨率
2021-02-04 17:46:06我最近花170美元买了一个中国的Windows平板电脑,它有一个intelatom x5z8300cpu,这是去年推出的低端intelatom。...在我的解决方案是降低Roblox获取的纹理的分辨率。我更喜欢用Python来做这件事,因为我可以很快... -
python批量修改图片的分辨率dpi值
2021-08-31 16:23:48很多论文和期刊,对文中插入图片的格式、色彩、图片大小、分辨率(dpi值)都有要求,针对图片分辨率,一般不得低于300dpi。为了满足要求,作者使用python语言完成图片dpi值批量修改,简洁实用。 提示:以下是本篇... -
python批量修改图片分辨率完整程序
2019-05-14 18:02:37/usr/bin/env python3 # _*_ coding: utf-8 _*_ # File : autofenbianlv.py # Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ # Date : 2019/5/14 from glob import glob from PIL import Image ... -
利用Python轻松实现图片相似度对比(二)
2020-06-30 16:56:11对每一张图片生成一个“指纹”,通过比较两张图片的指纹,来判断他们的相似度,是否属于同一张图片。 主要通过比较汉明距离来比较图片,值越小,越相似 1:均值哈希算法(Average hash algorithm) 基于比较灰度... -
基于Python的图像超分辨率(Image Super Resolution)
2022-01-22 21:42:49本实验将使用时深度学习技术对图像进行超分辨率重建,设计到的技术包括了卷积神经网络,生成对抗网络,残差网络等。 二、开发环境 本实验使用到“Microsoft Visual Studio”、“VS Tools for AI”等开发组件,涉及到... -
在opencvpython中调整视频分辨率
2020-12-07 12:46:24我想把我从我的网络摄像头得到的视频分辨率降低到一半(即从640x480到320x240),但我遇到了错误。在import numpy as npimport cv2cap = cv2.VideoCapture(0)cap.set(3,320)cap.set(4,240)while(True):# Capture frame... -
批量修改图片质量、分辨率(python)
2021-04-23 19:57:58深度学习在做数据集的时候,大多数情况下是不需要很高分辨率的图片做原数据集的,下面的程序是应用python和opencv的库来实现图片的降质处理。 import cv2 import os address = r"C:\Users\lenovo\Desktop\paperNeed... -
使用Python Opencv,可以修改图片的垂直水平分辨率吗?
2021-02-22 16:45:07我的意思是图片的单位分辨率,一英寸内的像素点数,是决定了图片的清晰度的属性,在打印机上打印的时候很需要注意。 使用Opencv的resize函数得到的图片都是96dpi,有没有其他办法修改ÿ... -
Python程序读写处理视频至指定分辨率 读取视频显示
2020-11-04 21:19:52因为模型需要指定分辨率,但包括格式工厂内的软件均不提供指定分辨率,没办法,自己参考编一个python程序 安装完opencv后,要重新启动anaconda # -*- coding: utf-8 -*- """ Spyder 编辑器 这是一个临时脚本文件。 ... -
使用python+opencv批量修改视频分辨率
2019-09-21 10:12:57当录取很多视频文件后,发现视频的分辨率不符合要求,于是使用python把320240的视频转换成160120的视频。 思路是:先对视频逐帧改分辨率,再将每一帧的图片合成视频,加上声音。 代码如下: 在这里插入代码片 ... -
python+opencv 批量修改视频分辨率
2022-04-12 17:52:40用Python和opencv批量改变视频分辨率。 -
Python修改保存图片分辨率(dpi)问题
2018-06-22 13:38:23首先导入 pillow ,下载地址:https://pypi.org/project/Pillow/代码:from PIL import Image as ImagePIL, ImageFont, ImageDraw from StringIO import StringIO ...# 保存图片im = ImagePIL.open('/home/uftp/jia...