首页 python正文

使用Python进行图像缩放处理

启明SEO python 2023-07-27 13:16:22 1647 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指纹修改方法?

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

win10下安装MYSQL后,提示Can't connect to MySQL server on localhost (10061)相关问题解决方法

win10下安装MYSQL后,提示Can't connect to MySQL server on localhost (10061)相关问题解决方法

我遇到的问题是电脑原先安装过mysql,卸......