首页 python正文

使用Python进行图像缩放处理

启明SEO python 2023-07-27 13:16:22 1809 1 图片压缩

最近要进行数据预处理,所以要将读取的图片进行缩放才能使用,所以就来学一学图像的缩放。

图像的缩放主要包括两种,一种是全比例缩放,即把图像x,y方向都进行等比例缩放,另外一种是非全比例缩放。


比例缩放矩阵:


其代数式:


两种缩小变换方法:


基于等间隔采样的图像缩小方法。

基于局部均值的图像缩小方法。


等间隔采样方法顾名思义,就是每隔固定的距离进行采样,这样就选择一些点,舍弃一些点,最后就能得到最终结果,使其效果和原来差不多。若比例因子为m和n,原图的矩阵为 f[M×N],缩小后的矩阵为 g [(M*m)×(N*n)],由于原图像素点多,映射到g后会出现多点对一点的现象所以我们从g映射到f,则有g(i,j) = f(i/m,j/n)

代码:

import cvdef Reduce(image,m,n):H = int(image.height*m)W = int(image.width*n)size = (W,H)iReduce = cv.CreateImage(size,image.depth,image.nChannels) #创建一个新图样for i in range(H):for j in range(W):x = int(i/m) #分别对x,y进行缩放y = int(j/n)iReduce[i,j] = image[x,y]return iReduce

实验效果


第二种缩放方法是基于局部均值的图像缩放方法


前面一种方法舍弃了很多点的信息,而局部均值法可以解决这个问题,我们说过f到g是一个多对一的映射前面的方法,我们简单的选取了其中的一个来映射到g,而这里,我们将找出所有映射到g(i,j)上的点,然后对他们的值取均值,好啦,具体思路如下:


此时g(i,j)不只是简单映射到f(i/m,j/n)了,而是可以映射到如下矩阵:

import cvdef JReduce(image,m,n):H = int(image.height*m)W = int(image.width*n)size = (W,H)iJReduce = cv.CreateImage(size,image.depth,image.nChannels)for i in range(H):for j in range(W):x1 = int(i/m)x2 = int((i+1)/m)y1 = int(j/n)y2 = int((j+1)/n)sum = [0,0,0]for k in range(x1,x2):for l in range(y1,y2):sum[0] = sum[0]+image[k,l][0]sum[1] = sum[1]+image[k,l][1]sum[2] = sum[2]+image[k,l][2]num = (x2-x1)*(y2-y1)iJReduce[i,j] = (sum[0]/num,sum[1]/num,sum[2]/num)return iJReducec


评论

Python好学公众号

好文推荐

实时访客入口页面出现bd_vid=标识是什么原因

实时访客入口页面出现bd_vid=标识是什么原因

最近查看百度实时访客,总是会看到入口页面会多......

有了微信视频号,但是没有发布权限,怎么开通

有了微信视频号,但是没有发布权限,怎么开通

视频号是微信在2020年1月19号开始内测的......

如何用python抓取爱企查企业信息

如何用python抓取爱企查企业信息

前段时间,经理让我去找一些企业的信息,我平常......

服务器配置低,宝塔面板安装IIS总是安装不上怎么办

服务器配置低,宝塔面板安装IIS总是安装不上怎么办

对于一般企业网站或者博客来说,对服务器的配置......

网站始终只收录一个首页,为什么

网站始终只收录一个首页,为什么

新做了两个网站,但是一直只是收录一个首页,快......

如何修改浏览器指纹,Canvas指纹、Webgl指纹、Audio指纹修改方法?

如何修改浏览器指纹,Canvas指纹、Webgl指纹、Audio指纹修改方法?

修改浏览指纹的方法其实也是很简单,主要使用到......