首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中按K因子缩放图像的最简单算法

在Python中按K因子缩放图像的最简单算法
EN

Stack Overflow用户
提问于 2021-03-29 03:35:58
回答 2查看 259关注 0票数 1

我完全是Python的新手。

我可以将图像放大3倍的最简单的算法是什么?我不想使用已经提供的缩放功能。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-29 16:06:15

这项任务比较繁琐,所以我展示了一种实现行缩放的简单方法。同样,您也可以修改索引来实现new_image的列索引。

代码语言:javascript
运行
复制
# loading the image
from PIL import Image
import numpy as np
image = np.asarray( Image.open("img.jpg") )
import matplotlib.pyplot as plt

# create new image of correct size
m = len(image[0])
n = len(image)
factor = 3
new_image = np.zeros((factor*(n-1) + 1,factor*(m-1) + 1,3), dtype=int)

# implement row zooming
for i in range(n):
    row = image[i]
    for k in range(len(row)-1):
        new_image[i][k*factor], new_image[i][(k+1)*factor] = row[k], row[k+1]
        for mode in range(3):
            # need mode as three colour channels in RGB

            lo = int(min(row[k][mode], row[k+1][mode]))
            hi = int(max(row[k][mode], row[k+1][mode]))
            diff = int((hi-lo)//factor)
            for x in range(factor-1):
                new_image[i][k*factor+1+x][mode] = lo + (x*diff)
票数 0
EN

Stack Overflow用户

发布于 2021-03-29 03:52:39

假设您的文件系统上有一个名为lenna.png的.png映像。您可以加载它并将其转换为numpy数组,如下所示

代码语言:javascript
运行
复制
from PIL import Image
import numpy as np
image = np.asarray( Image.open("lenna.png") )
import matplotlib.pyplot as plt
plt.imshow(image)
plt.show()

Numpy提供了一种简单的方法来提高像素分辨率,如下所示:

代码语言:javascript
运行
复制
# Simply increase the resolution of the image by repeating the pixels
zoom_factor = 3
for i in range(2):
    image = np.repeat(image, zoom_factor, axis=i)

如果我们绘制图像,它现在在每个维度上都有更多的像素:

然后,您可以像这样裁剪新的高分辨率图像,从而只显示图像的一部分

代码语言:javascript
运行
复制
# Focus on any paricular region by croping it out
image = image[700:1000, 700:1000]
plt.imshow(image)
plt.show()

结果如下所示

干杯!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66845466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档