纪念我的第一个稍微有用一点的python代码的成功——利用最近邻插值法实现图像的放大

一、技术来源:

        插值算法 | 最近邻插值法_哔哩哔哩_bilibili

        感谢这位的技术分享,讲解得通俗易懂

二、一些磕磕绊绊:

1.首先,pycharm的使用,通过file创建一个新的项目(最好可以记住文件路径),然后就可以直接在main.py中写代码了

2.然后,常常需要处理 各种“库”的问题,可以在下面找到对应的地方,也可以file-settings-projuct-interpreter中点那个“+”加号进行install

3.有时候pycharm会标注一些红线,先别管它,比如,我这里的numpy它一直标红,

4.关于error怎么处理?先chatGPT,然后csdn解决

三、最邻近插值法的思想(那个视频的笔记浓缩版本)

1.主要思想:

需要图像放大后(无论怎样一定是“数字”也就是整数对象),在缩小为等比例,每个小格子对应找到原来的9个格子中的一个,然后作为小格子中的数值

2.代码:

注意,首先,我在pycharm-project2文件夹里面放入了一张test1.jpg

最终也在那里生成了一张放大1.5倍的test.jpg图片

import numpy as np
from PIL import Image

def nearest_neighbor_interpolation(image,scale_factor):
    height,width = image.shape[:2] #读取图像的长宽

    out_height = int(height*scale_factor)
    out_width = int(width*scale_factor)

    output_image = np.zeros((out_height,out_width,3),dtype = np.uint8)

    for out_y in range(out_height):
        for out_x in range(out_width):
            input_x = int(round(out_x/scale_factor))
            input_y = int(round(out_y/scale_factor))

            input_x = min(input_x,width-1)
            input_y = min(input_y,height-1)

            output_image[out_y,out_x] = image[input_y,input_x]
    return output_image

#读取原始图像:
input_image = Image.open('test.jpg')
image_array = np.array(input_image)

#输出缩放后的图像:
output_array = nearest_neighbor_interpolation(image_array,1.5)
output_image = Image.fromarray(output_array)

output_image.save('test2.jpg')



3.效果就不看了,那个图片是我女神

确实是模糊了一点,不过看不出来

4.必须用这个最邻近插值法的场景:

语义分割后的放大缩小

猜你喜欢

转载自blog.csdn.net/xiao_ZHEDA/article/details/132589713