图像放大和缩小

news/2024/11/15 12:26:30/

图像放大和缩小

    • 1. 图像的缩小
    • 2. 图像的放大
    • 3. 用python实现图像的缩放
      • 3.1 方法一:PIL库实现
      • 3.2 方法二:cv库实现

1. 图像的缩小

图像缩小分为按比例缩小和不按比例缩小两种。图像向缩小后,因为承载的信息量减少,所以画布可相应缩小。图像缩小实际上就是对原图数据进行挑选和处理,获得期望缩小尺寸的数据,并尽量保持原有特征不丢失。最简单的方法就是等间隔地选取数据。
设原始图像大小为MN,缩小为k1Mk2N,(k1,k2 均小于1)。
设原始图像为F(i,j),i=1,2,…,M j=1,2,…,N;
压缩后的图像为G(x,y),,x=1,2,…,k1M y=1,2,…,k2N;
则有G(x,y) = F(c1x,c2y),其中c1 = 1/k1,c2=1/k2;
示例:档F(i,j)为6X6,k1=0.6,k2=0.75时,有
在这里插入图片描述
那么,得到的G图像行和列数为x=[1,60.6]=[1,4],四舍五入,最后留下4行,y=[1,60.75]=[1,5],最后留下5列。而行列所对应的值为原始F保留的对应目标像素的值,即G(x,y) = F(c1x,c2y)。

2. 图像的放大

图像放大从信息处理的角度来看,与图像缩小难易程度完全不一样,图像缩小是从众多信息中选出需要的信息,而图像放大则是需要对多出的空位填入适当的值,是信息的估计。
当放大倍数为整数时,最简单的方法是将原图像中的像素值,填在新图像中对应的kk大小的子块中。
设原始图像为F(i,j),i=1,2,…,M j=1,2,…,N;
放大后的图像为G(x,y),,x=1,2,…,k1M y=1,2,…,k1N;
则有G(x,y) = F(c1
i,c2*j),其中c1 = 1/k1,c2=1/k2
在这里插入图片描述

3. 用python实现图像的缩放

3.1 方法一:PIL库实现

相关库PIL,PIL(Python Imaging Library,图像处理库)提供了通用的图像处理功能,主要包括图像存储、图像显示、格式转换以及基本的图像处理操作。
应用PIL下Image类:

变换结果数据属性以及内存地址
src<PIL.PngImagePlugin.PngImageFile image mode=RGB size=512x512 at 0x20AF35975C8>
resizedresized: <PIL.Image.Image image mode=RGB size=307x384 at 0x20AF4266AC8>
thumbnailthumbnail: <PIL.PngImagePlugin.PngImageFile image mode=RGB size=307x307 at 0x20AF35975C8>

thumbnail 缩略图是网络开发或图像软件预览常用的一种基本技术。thumbnail 方法直接修改原图为缩略图,不会另外创建新内存。resized会在创建新的内存保存缩放数据。
在这里插入图片描述
代码实现:

def ChangeSizeofImg(imgDress,wRate=0.6,hRate=0.75):img = Image.open(imgDress)print("src:",img)new_x, new_y = img.sizenew_x, new_y = int(wRate*new_x),int(hRate*new_y)# 得到修改数据resized = img.resize((new_x, new_y),resample=Image.LANCZOS)print("resized:",resized)# 修改原始数据img.thumbnail((new_x, new_y),resample=Image.LANCZOS)print("thumbnail:",img)return resized, imgif __name__ == "__main__":out3,out4 = ChangeSizeofImg("./data/lena.png")# 数据格式非mat,不能有cv.show显示。out3与out4是PIL Image的实例,直接调用方法显示。out3.show()out4.show()

注意:返回的out3与out4是PIL Image的实例,直接调用show方法显示,不能和cv中的imshow混用。

3.2 方法二:cv库实现

cv2.resize(src,dsize[,dst[,fx[,fy[,interpolation]]]]) -> dst

interpolation - 插值方法。共有5种:
1)INTER_NEAREST - 最近邻插值法
2)INTER_LINEAR - 双线性插值法(默认)
3)INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。
4)INTER_CUBIC - 基于4x4像素邻域的3次插值法
5)INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值

实现缩放:
在这里插入图片描述
在这里插入图片描述
代码:

#!/usr/bin/python
# -*- coding = utf-8 -*-
# author: beauthy
# date: 2020.3.27
# version: 1.0.0
"""
输出缩放图像OutResizeImage
"""
__author__ = 'beauthy'import cv2
import osdef OutResizeImage(img,wRate=0.6,hRate=0.75):"""缩小图像比例为(0.6,0.75)放大图像比例为(1.5,1.2)"""height, width = img.shape[:2]if (wRate<1) & (hRate<1):# 缩小图像size = (int(width*wRate),int(height*hRate))shrink = cv2.resize(img,size,interpolation=cv2.INTER_AREA)return shrinkelse:# 放大图像fx,fy = wRate,hRateenlarge = cv2.resize(img,(0,0),fx=fx,fy=fy,interpolation=cv2.INTER_CUBIC)return enlargeif __name__ == "__main__":im = cv2.imread("./data/lena.png",-1)# if im == None:#     print("Error:could not load image")#     os._exit(0)# 缩小out1 = OutResizeImage(im)# 放大out2 = OutResizeImage(im,1.5,1.2)# 显示cv2.imshow("src",im)cv2.imshow("out1",out1)cv2.imshow("out2",out2)cv2.waitKey(0)

http://www.ppmy.cn/news/699415.html

相关文章

ps制作放大镜

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术&#xff1a;Photoshop/剪贴蒙版 撰写时间&#xff1a;2021年4月28日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 效…

html图片变大不失真,怎么用Photoshop把一张图片放大后让图片不失真?

回答&#xff1a; 1、打开PS并点击左上角的“文件”&#xff1b;之后再点击“打开”(也可以按下快捷键“CtrlO”)&#xff0c;打开文件选择窗口。 2、在打开的文件选择窗口中&#xff0c;找到并选中需要合并的两张图片&#xff1b;然后点击一下“打开”按钮&#xff0c;将图片导…

聊聊Excel解析:如何处理百万行EXCEL文件? | 京东云技术团队

一、引言 Excel表格在后台管理系统中使用非常广泛&#xff0c;多用来进行批量配置、数据导出工作。在日常开发中&#xff0c;我们也免不了进行Excel数据处理。 那么&#xff0c;如何恰当地处理数据量庞大的Excel文件&#xff0c;避免内存溢出问题&#xff1f;本文将对比分析业…

使用显式特征的在线交互感知提升网络

目录 1介绍 2相关工作 2.1提升建模 2.2特征交互 3前提 4提出的方法 4.1架构 4.2训练 5试验评估 6结论和未来 英文题目&#xff1a;Explicit Feature Interaction-aware Uplift Network for Online Marketing 翻译&#xff1a;使用显式特征的在线交互感知提升网络 单…

生成古风少女图片【InsCode Stable Diffusion美图活动一期】

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 写在前面 Stable Diffusion 模型在线使用地址&#xff1a; 工具介绍 一.如何使用S…

C#实现QQ扫码登录

第一步&#xff1a;获取AppID AppSecret(去QQ开放平台申请网址https://connect.qq.com/index.html/) 第二步&#xff1a;生成扫描二维码&#xff0c;获取code https://graph.qq.com/oauth2.0/authorize?response_typecode&client_idyourclient_id&redirect_uri回调地址…

Go语言版实现QQ扫码登陆

点击查看 官方文档 1. 申请appid和appkey appid&#xff1a;应用的唯一标识。在OAuth2.0认证过程中&#xff0c;appid的值即为oauth_consumer_key的值。appkey&#xff1a;appid对应的密钥&#xff0c;访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中&#xff0c;…

使用JSSDK实现网站的QQ登录

使用JSSDK实现网站的QQ登录 进入QQ互联官网&#xff1a;https://connect.qq.com/index.html 进行开发者注册并审核认证【实名认证】&#xff1a;首先使用QQ账号登录上述的QQ互联官网&#xff1b;接着填写开发者审核认证资料&#xff0c;需提交&#xff1a;开发者类型&#xf…