python保存图片时如何和原图大小一致
作者:吨吨不打野 发布时间:2022-07-13 03:34:36
标签:python,保存图片,原图,大小一致
python保存图片时和原图大小一致
之前遇到过一次这个问题,当时解决了但是忘了记录,这里再记录一次好了。
1. matplotlib系列的
整体代码如下:
import cv2
import matplotlib.pyplot as plt
name="1-1.png"
path="crop/"+name
src = cv2.imread(path)
img = cv2.cvtColor(src, cv2.COLOR_BGR2RGB)
# Opencv和matplotlib读取图片的渠道不同,需要转换
# cv2.imshow("original image", src)
# 获取图像的高度和宽度
plt.savefig('my_fig.png', dpi=my_dpi)
plt.imshow(img)
IMG = cv2.bitwise_not(img)
# 进行反色操作
# cv2.imshow("bitwise image", img)
mydpi=96
plt.figure(figsize=(Width/mydpi,Height/mydpi),dpi=mydpi)
# figsize中的单位是inches,重点解释一下这个figsize参数,先写宽度,再高度
"""
figsize : (float, float), optional, default: None width, height in inches. If not provided, defaults to:rc:`figure.figsize` = ``[6.4, 4.8]``
"""
plt.imshow(IMG)
plt.axis('off')
# 去掉坐标轴
# 保存
plt.savefig("processcrop/"+name,dpi=mydpi)
但是不知道为什么还是会有白边。。。
注意:
如果是在jupyter lab中,plt.axis('off')就不会有问题,但是在jupyter notebook中,就会报错。
jupyter lab中:
jupyter notebook中,再次恢复环境竟然好了,之前的报错信息大概就是plt.axis("off")这个函数不接受bool类型的值
2. opencv系列的
opencv默认保存就是和原图一样的大小
name="1-1.png"
path="crop/"+name
src = cv2.imread(path)
plt.imshow(src[:, :, ::-1])
plt.axis('off')
img = cv2.bitwise_not(src)
cv2.imwrite("processcrop/"+name,img)
原图:
保存后的图:
参考——stack overflow的回答:Specifying and saving a figure with exact size in pixels
plt.figure(figsize=(800/my_dpi, 800/my_dpi), dpi=my_dpi)
# 假设有一个800×800pix的图,要显示在本机电脑dpi为96的电脑上,则要保持原图大小显示就可以使用上述代码。
plt.savefig('my_fig.png', dpi=my_dpi)
# 保存成相同分辨率,使用上述代码
# 如果想把分辨率提高10倍,则可以进行如下方式,则就保存了一个8000X8000的高清图
plt.savefig('my_fig.png', dpi=my_dpi * 10)
另外根据另一个回答:How to get matplotlib figure size
import matplotlib.plt
fig = plt.figure()
# 在构建画布的时候就已经有一个默认的分辨率了
size = fig.get_size_inches()*fig.dpi # size in pixels
python批量处理图片统一尺寸
方法一:
import numpy as np
import os
import cv2
# 设置图片路径,该路径下包含了14张jpg格式的照片,名字依次为0.jpg, 1.jpg, 2.jpg,...,14.jpg
DATADIR="D:\Code\ToolBox"
#设置目标像素大小,此处设为300'''
IMG_SIZE=300
#使用os.path模块的join方法生成路径'''
path=os.path.join(DATADIR)
#使用os.listdir(path)函数,返回path路径下所有文件的名字,以及文件夹的名字,
#例如,执行下行代码后,img_list是一个list,值为['0.jpg','1.jpg','10.jpg','11.jpg','12.jpg','13.jpg','14.jpg',
#'2.jpg','3.jpg','4.jg', '5.jpg', '6.jpg', '7.jpg',
#'8.jpg', '9.jpg'],注意这个顺序并没有按照从小到大的顺序排列'''
img_list=os.listdir(path)
ind=0
for i in img_list:
#调用cv2.imread读入图片,读入格式为IMREAD_COLOR'''
img_array=cv2.imread(os.path.join(path,i),cv2.IMREAD_COLOR)
#'''调用cv2.resize函数resize图片'''
new_array=cv2.resize(img_array,(IMG_SIZE,IMG_SIZE))
img_name=str(ind)+'.jpg'
#'''生成图片存储的目标路径'''
save_path='D:\\Code\\resized\\'+str(ind)+'.jpg'
ind=ind+1
#'''调用cv.2的imwrite函数保存图片'''
cv2.imwrite(save_path,new_array)
方法二:
#提取目录下所有图片,更改尺寸后保存到另一目录
from PIL import Image
import os.path
import glob
def convertjpg(jpgfile,outdir,width=128,height=128):
img=Image.open(jpgfile)
try:
new_img=img.resize((width,height),Image.BILINEAR)
new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))
except Exception as e:
print(e)
for jpgfile in glob.glob("E:\\img\\*.jpg"):
convertjpg(jpgfile,"E:\\lianhua")
方法三:该方法批量修改图片大小和文件夹名称
import os
from PIL import Image
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r'c:\windows\fonts\SimSun.ttc', size=14)
# 获取当前路径
path_abs = os.getcwd()
print u'*****************开始文件名更名操作*****************'
print path_abs
# 遍历当前路径下的文件以及文件目录
for root, dir_name, file_name in os.walk(path_abs):
# 统计文件夹个数
num_dir = len(dir_name)
for idx, item in enumerate(dir_name):
print u'第', idx, u'个文件正在更名......'
item_new = 'test_' + '0' * (1 - idx / 10) + str(idx)
# 原文件路径
path_dir_old = path_abs + '\\' + item
# print u'原文件路径:', path_dir_old
# 新文件路径
path_dir_new = path_abs + '\\' + item_new
# print u'新文件路径:', path_dir_new
# 更名操作
os.renames(path_dir_old, path_dir_new)
print u'*****************文件名更名完毕!*****************'
print u'*****************图片名更名*******************'
for root1, dir_name1, file_name1 in os.walk(path_abs):
num1_dir = len(dir_name1)
for idx1, item1 in enumerate(dir_name1):
path_dir1 = path_abs + '\\' + item1
for root2, dir_name2, file_name2 in os.walk(path_dir1):
for idx2, item2 in enumerate(file_name2):
# 原路径 + 图片名
item2_old = path_dir1 + '\\' + item2
# 新路径 + 图片名(强制转换成jpg格式,数字6制定图片名长度以及0的填充个数)
item_new2 = 'idx_'+ '0' * (5 - len(str(idx2))) + str(idx2)
item2_new = path_dir1 + '\\' + item_new2 + '.jpg'
# 更名
os.rename(item2_old, item2_new)
# resize 成指定尺寸大小
img = Image.open(item2_new)
img_new = img.resize((220, 220))
# save 保存
img_new.save(item2_new)
来源:https://blog.csdn.net/Castlehe/article/details/116979507
0
投稿
猜你喜欢
- 本文实例讲述了python实现基于两张图片生成圆角图标效果的方法。分享给大家供大家参考。具体分析如下:使用pil的蒙版功能,将原图片和圆角图
- 张同学 10.4号开始发视频,视频的点赞量一直很高,11.17 号的视频达到了顶峰,收获 250w 个赞,之后关注量也开启了暴涨。所以挖掘
- uniapp页面跳转的几种方式一、uni.navigateTo定义:保留当前页面,跳转到应用内的某个页面,使用uni.navigateBac
- 1、通过探测Flash Player的版本,来决定显示Flash内容还是替换内容,避免了过时的Flash插件影响Flash内容的正常显示。2
- 本文实例讲述了js+php实现静态页面实时调用用户登陆状态的方法。分享给大家供大家参考。具体分析如下:在程序开发中,经常会把页面做成html
- PHP+MySQL的组合是构建网站的一个常见搭配,不过如何使用PHP通过Web访问MySQL数据库呢?下面从Web数据库架构的工作原理讲起。
- 目录一、IPO模型 二、基本输入 - input()函数1、函数格式2、参数说明3、实例演示(1)接收字符串数据(2)接收整型数据
- 某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进。准备爬的历
- 如下所示:区别ArrayTensor类型uint8,float32系列{}各类型相互转换uint8转float64:image = imag
- 人类学是关于人的研究;社会人类学(social anthropology)是研究人类社会的学科。社会人类学还可以理解成“文化翻译”(the
- 如何最大限度地实现安全登录功能? 具体方法如下(这是一个程序,为便于说明,中间用虚线“------”将代
- 本文实例为大家分享了Python实现k-means算法的具体代码,供大家参考,具体内容如下这也是周志华《机器学习》的习题9.4。 数据集是西
- 在使用ASP来进行后端的数据合法性校验的时候,有些人为满足不同环境下面的数据校验,编写了很多的函数来实现,比如,我们想要校验用户输入的URL
- 看代码 <?php header("Content-type: text/html; charset=utf-8"
- K-means算法介绍简单来说,K-means算法是一种无监督算法,不需要事先对数据集打上标签,即ground-truth,也可以对数据集进
- 把昨天做的高级查询界面完善了一下,支持动态添加多个查询条件、定义逻辑关系,支持整形、浮点、字符串、日期、布尔值、自定义选择列表的录入,通过E
- 本文实例讲述了Codeigniter控制器controller继承问题。分享给大家供大家参考,具体如下:在项目中经常用到这样一种情况,后台中
- 导语:近年来,全世界都纷纷投身网络热潮。从小企业到大公司,再到网络学校和大学,大家都在努力提升自己的网络影响力,这样既免费为自身品牌做广告,
- 一. 安装 Beautiful Soup首先,您需要安装 Beautiful Soup。在终端或命令提示符中运行以下命令:pip insta
- 昨天晚上睡觉前突然想到的,在此记一笔。传统方式以前我们做文章系统或新闻发布系统的时候,做文章内链(标签)的时候,通常是通过以下方式来实现的: