2019-2020-1学期 20192428 第二周作业——图像转换(补做)

2019-2020-1学期 20192428 第二周作业——图像转换(补做)

在学习过Python的第三方库NumPy库后,我决定对该选做作业进行补做
NumPy库是Python开源的科学计算基础库,凭借其强大的N维数组操作而闻名。而在计算机中,图像是由一个像素组成的二维矩阵,每个元素为一个RGB值。
此次我的目标图片为下面这一张bmp格式图像:


下面是对该文件的读取

文件路径为"D:/Deskdop/aim/aim.bmp"

from PIL import Image
import numpy as np

aim = np.array(Image.open("D:/Deskdop/aim/aim.bmp"))
print(aim.shape,aim.dtype)

而读取结果如下:

如图,输出结果为:

(1300, 975, 3) uint8

故可见,该bmp文件为1300x975像素点,每个像素点有三个值(RGB值)的三维数组表示,且其数组元素类型为uint8的整数类型
此时,若直接print变量aim,得出的结果是:

利用降维函数,我对“aim”进行降维并将其储存为变量“test1”,并将其储存为csv文件格式,命名aim.csv。
因为之前提到该文件是1300x975像素点,故数组变为一维时应有1300x975x3个元素依次展开,即有1300x975x3=3802500个元素,我们打开csv文件,可见每个元素依次展开,共3802500行(每行一个元素)。


图中可以看到,正好有3802500


考虑到更简单的方法,我使用了NumPy库的索引方法,配合循环,完成了画出一条横线,我的指令如下:

#利用修改数组值的方法进行图像处理
#20192428魏来第一周作业补做
#所用到的第三方库:NumPy、PIL
from PIL import Image
import numpy as np

aim = np.array(Image.open("D:/Deskdop/aim/aim.bmp"))
num = 0
for i in range(975):
    aim[700,num] = np.array([0,0,0])
    num = num + 1
print(aim.shape,aim.dtype)
aim2 = Image.fromarray(aim.astype("uint8"))
aim2.save("D:/Deskdop/aim/aim2.bmp")

该方法成功了,得出的附件为下图(因为网页不支持bmp文件上传,故我生成了一个PNG附件进行上传):

可见图中有一条明显的横向黑线


受到启发我又发现该指令做出轻微的修改可以做出一条竖线:

#利用修改数组值的方法进行图像处理
#20192428魏来第一周作业补做
#所用到的第三方库:NumPy、PIL
from PIL import Image
import numpy as np

aim = np.array(Image.open("D:/Deskdop/aim/aim.bmp"))
num = 0
for i in range(1300):
    aim[num,450] = np.array([0,0,0])
    num = num + 1
print(aim.shape,aim.dtype)
aim3 = Image.fromarray(aim.astype("uint8"))
aim3.save("D:/Deskdop/aim/aim3.bmp")

生成了aim3的副本:

如图,为aim3副本,其图像中存在一条黑色的竖线。


以及一条斜线:

#利用修改数组值的方法进行图像处理
#20192428魏来第一周作业补做
#所用到的第三方库:NumPy、PIL
from PIL import Image
import numpy as np
aim = np.array(Image.open("D:/Deskdop/aim/aim.bmp"))
num1 = 0
num2 = 0
for i in range(1300):
    aim[num1,num2] = np.array([0,0,0])
    num1 = num1 + 1
    num2 = int((num1/1300)*975)
print(aim.shape,aim.dtype)
aim4 = Image.fromarray(aim.astype("uint8"))
aim4.save("D:/Deskdop/aim/aim4.bmp")


以及图片的补色集:

#利用修改数组值的方法进行图像处理
#20192428魏来第一周作业补做
#所用到的第三方库:NumPy、PIL
from PIL import Image
import numpy as np
aim = np.array(Image.open("D:/Deskdop/aim/aim.bmp"))
aim5 = [255,255,255] - aim
aim5 = Image.fromarray(aim5.astype("uint8"))
aim5.save("D:/Deskdop/aim/aim5.bmp")

以及很多很多种不同的玩法。。。。在这里就不过多的赘述了,希望诸位在阅读过后可以自己尝试,争取配置出一套自己喜欢的滤镜!

原文地址:https://www.cnblogs.com/KamanFuture/p/11844812.html