使用Python进行图像缩放处理 您所在的位置:网站首页 python图片缩放代码 使用Python进行图像缩放处理

使用Python进行图像缩放处理

2023-04-06 23:45| 来源: 网络整理| 查看: 265

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

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

比例缩放矩阵:

其代数式:

两种缩小变换方法:

基于等间隔采样的图像缩小方法。基于局部均值的图像缩小方法。

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

代码:

import cv def 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 cv def 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 简单图像处理(5) 缩放

这篇文章我先留个坑,有时间再把代码改下。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有