• 2019-2020-1 《python程序设计》20192428魏来 综合实践报告


    学号 20192428《Python程序设计》综合实践报告

    课程:《Python程序设计》
    班级: 1924
    姓名: 魏来
    学号:20192428
    实验教师:王志强
    实验日期:2020年6月8日
    必修/选修: 公选课

    1.实验内容

    -Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
    -我选择了一个简单的数据分析课题——Numpy库,一个开源的python科学计算基础库。

    2. 实验过程及结果

    Numpy库我在上学期就有自己的研究,曾经在网空导论课中有一个课题是图片处理,当时进行了简单的图像处理控制。如今我想对Numpy库进行深度的刨析,做出属于自己的滤镜。
    我要用到的库有: Numpy库、PIL库、cv2

    首先是Numpy库对图片的简单读取。下面这张图是我这次实验的主角——

    (某天走在路上的随手一拍天空~)
    下面让我们看看Numpy库对图片的数组处理:

    如图,Numpy库实际上是把图片当作一个二维数组处理——长、宽,而在每一个单元格中会有三个值,是代表色彩的RGB值。让我们一起看看这个图片的长度和高度。
    让我们看看运行结果:

    让我们看看对不对呢

    可以看到图片属性的长宽都一致
    同时还有一种方法可以让我们将图片的RGB值读出来——CSV文件:是一种常用的文件格式,可以用来批量的保存数据。下面代码片段是写入一个csv文件
    利用降维函数,我对“Aim”进行降维并将其储存为变量“test1”,并将其储存为csv文件格式,命名Aim.csv。

    让我们用vscode打开一个文件一起来看看吧:

    同时让我们看一下这个图片转化的数组的属性:

    以及运行结果

    Topic Ⅰ:翻转图片
    代码片段:

    对图片翻转的操作非常简单,将二维数组的横轴和竖轴对换即可。所以如图我利用for循环对图片横轴(Size[0])遍历,同时建立一个Aim11的数组(因为之前探究属性时知道type为uint8),将Aim11作为新图片的容器,最后使用save函数保存Aim11的副本。下面为我得到的副本:

    至此第一个小课题正式成功。

    Topic Ⅱ:颜色翻转
    代码片段

    这可以说是最简单的一个课题了,只需要一个满RGB值[255,255,255]减去之前的数组,使数组中的每个RGB值取255的补数,就能够得到负片的效果,让我们一起看看这个处理过后的图片吧:

    Topic Ⅲ:赛博朋克风格滤镜~
    代码片段

    通过cv2库和Numpy库的运用可以设计一份专属于你的滤镜,可以先来看看我的滤镜最终的效果。

    显然做的不是很好。。。但对图片过暗和过亮地方的处理的确处理的很得当:

    light_gamma_high = np.power(image_lab[:, :, 0], 0.8)
    light_gamma_high = np.asarray(light_gamma_high / np.max(light_gamma_high) * 255, np.uint8)
    light_gamma_low = np.power(image_lab[:, :, 0], 1.2)
    light_gamma_low = np.asarray(light_gamma_low / np.max(light_gamma_low) * 255, np.uint8)
    

    即上段代码

    1. 实验过程中遇到的问题和解决过程
      Numpy库的学习是我最大的问题,但幸亏与Mooc上的老师们,我成功学会了这个库,下面是我的学习过程笔记照片:

    我遇见的问题也很多,更多的是编程时的小错误,我举一个小例子:

    在实验中topic Ⅰ中for循环的错误,导致图片处理进行了一个死循环,当程序结束后得到的成果。


    这个则为做赛博朋克时的模板,使用了cv2的模板进行滤镜的编辑,但我在最后输出滤镜成品时忽略了数组命名,导致输出白忙活一场——输出了模板。而我自己却甚至一度以为这个模板即为我编辑的滤镜效果。

    其他(感悟、思考等)

    对全课进行总结,并写课程感想体会、意见和建议等
    Python是我进入大学以来第一个感兴趣的事物,从第一周进入大学接触到它我就开始研究,我对python的笔记甚至多于我大学其他科目所有笔记加起来的总和。所以对我来所这是一门得心应手的语言,因此我选择了这门课程为我的第一次选修课的内容。
    但进入班级以后王老师细心教导下,我发现了之前自己的编程习惯非常繁琐复杂,而且在自学的时候养成了很多坏习惯,一些简便编程写法也不习惯。我明白了python虽然相比C、C++亦或是其他语言来说相对智能,可以不用太追求精准,但对于语言的效率,很大程度是取决于你的编程效率。
    Python学习中,我最好的三个老师就是王志强老师、MOOC中的松老师还有实验楼。三位老师帮助我完成了很多艰巨的学习挑战,在我的学习之路中提供了信心和思路。
    感谢志强老师的帮助,感谢这门选修课,将来我会Python的道路上继续坚定的走下去。
    再次感谢王志强老师!

    以下是我的代码全文:

    "20192428 魏来  Python期末作业"
    
    #启动第三方库
    from PIL import Image
    import numpy as np
    
    #准备工作
    Aim = np.array(Image.open("D:/Deskdop/topic/aim.jpg"))
    Size = Aim.shape  #展示图片的size
    print("图像高度{}宽度{}".format(Size[0],Size[1]))
    
    #写入CSV文件
    test = Aim.flatten()
    np.savetxt("aimcsv.csv",test,fmt="%d",delimiter=" ")
    
    #查看图片数组属性  20192428魏来
    print(Aim.shape,Aim.dtype)
    print(Aim)
    
    #操作一:对图片进行翻转  20192428魏来
    LoopNum1 = 0
    LoopNum2 = 0
    Aim11 = Aim
    for i in range(Size[0]):
        Aim11[LoopNum1,LoopNum2] = Aim[Size[0] - 1 - LoopNum1,LoopNum2]
        LoopNum1 = LoopNum1 + 1
    Aim11 = Image.fromarray(Aim11.astype("uint8"))
    Aim11.save("D:/Deskdop/topic/Aim11.jpg")
    
    #操作二:对图片进行颜色翻转  20192428
    Aim12 = [255,255,255] - Aim
    Aim12 = Image.fromarray(Aim12.astype("uint8"))
    Aim12.save("D:/Deskdop/topic/Aim12.jpg")
    
    #操作三:赛博朋克滤镜制作  20192428
    import cv2
    
    image_hls = cv2.cvtColor(Aim, cv2.COLOR_BGR2HLS)
    image_hls = np.asarray(image_hls, np.float32)
    hue = image_hls[:, :, 0]
    hue[hue < 90] = 180 - hue[hue < 90]
    image_hls[:, :, 0] = hue
    image_hls = np.asarray(image_hls, np.uint8)
    image = cv2.cvtColor(image_hls, cv2.COLOR_HLS2BGR)
    image_lab = cv2.cvtColor(image, cv2.COLOR_BGR2Lab)
    image_lab = np.asarray(image_lab, np.float32)
    
    light_gamma_high = np.power(image_lab[:, :, 0], 0.8)
    light_gamma_high = np.asarray(light_gamma_high / np.max(light_gamma_high) * 255, np.uint8)
    light_gamma_low = np.power(image_lab[:, :, 0], 1.2)
    light_gamma_low = np.asarray(light_gamma_low / np.max(light_gamma_low) * 255, np.uint8)
    
    # 调色至偏紫
    dark_b = image_lab[:, :, 2] * (light_gamma_low / 255) * 0.1
    dark_a = image_lab[:, :, 2] * (1 - light_gamma_high / 255) * 0.3
    image_lab[:, :, 2] = np.clip(image_lab[:, :, 2] - dark_b, 0, 255)
    image_lab[:, :, 2] = np.clip(image_lab[:, :, 2] - dark_a, 0, 255)
    image_lab = np.asarray(image_lab, np.uint8)
    
    Aim13 = cv2.cvtColor(image_lab, cv2.COLOR_Lab2BGR)
    Aim13 = Image.fromarray(Aim13.astype("uint8"))
    Aim13.save("D:/Deskdop/topic/Aim13.jpg")
    
  • 相关阅读:
    CF1454F Array Partition
    leetcode1883 准时抵达会议现场的最小跳过休息次数
    leetcode1871 跳跃游戏 VII
    leetcode1872 石子游戏VIII
    CF1355C Count Triangles
    CF1245D Shichikuji and Power Grid
    CF1368C Even Picture
    CF1368D AND, OR and square sum
    CF1395C Boboniu and Bit Operations
    SpringBoot和开发热部署
  • 原文地址:https://www.cnblogs.com/KamanFuture/p/13095095.html
Copyright © 2020-2023  润新知