zoukankan      html  css  js  c++  java
  • 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")
    
  • 相关阅读:
    公众号开发笔记一
    公众号开发笔记一
    ArrayList,LinkedList和String
    ArrayList,LinkedList和String
    第56节:ArrayList,LinkedList和String
    第55节:Java当中的IO流-时间api(下)-上
    Java当中的IO流-时间api(下)-上
    当用python读取几十万行文本时,会出现什么状况?
    Python 如何定义只读属性?【新手必学】
    Python之数据分析工具包介绍以及安装【入门必学】
  • 原文地址:https://www.cnblogs.com/KamanFuture/p/13095095.html
Copyright © 2011-2022 走看看