zoukankan      html  css  js  c++  java
  • 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")
    

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

  • 相关阅读:
    加分二叉树
    飞扬的小鸟
    洛谷P2066 机器分配
    解方程
    洛谷P1781 宇宙总统
    洛谷P1311 选择客栈
    洛谷P1081 开车旅行70分
    CSS清除浮动
    常见的内联元素与块状元素
    标签的权值问题(优先级)
  • 原文地址:https://www.cnblogs.com/KamanFuture/p/11844812.html
Copyright © 2011-2022 走看看