zl程序教程

您现在的位置是:首页 >  后端

当前栏目

“牧童骑黄牛”(Python代码实现)

Python代码 实现
2023-09-14 09:14:29 时间

目录

 

1 清明佳节

2 无用的哲思

2.1 西方无用的哲思

2.2 中国实用哲学

3 “牧童骑黄牛”的视觉震撼(Python代码实现)

3.1 OpenCV简介

3.2 OpenCV应用领域

3.3 "牧童骑黄牛"效果 

3.4 Python完整代码 

4 展望 


1 清明佳节

由于疫情原因,也回不了家,所以安心坐下来写一篇博文,也搞搞科研:


2 无用的哲思

上一部分我们分享的做出来的科研成果水平可能就一般,要真正到达西方那种科研水平论文,还是需要学习人家一点底层逻辑思维。我们生在中国,即使不读孔孟,骨子里也会受到“仁义礼智信”的渲染;牛顿、爱因斯坦不读古希腊古典哲学,她血液里面也流淌着古希腊底层逻辑思维。

对于哲学,很是喜爱,当然也有自己的思考:

2.1 西方无用的哲思


       爱因斯坦的相对论,开创了整个20世纪以来的科学时代,起初连他本人都不相信,这套理论可以作为量子力学与核物理应用的基础,他甚至公然反对量子力学,而且直到英国著名科学家爱丁顿首次为时空弯曲做出观察证明后,爱丁顿仍说全世界真正能理解爱因斯坦的仅有两个半人,而他自己只算其中的半个人。

       哲学旧称“形而上学”。一般情况下,人们活在“形而下”的直观世界里,所以不懂哲学应丝毫不碍于生存。哲学对于对于人的精神,至少也相当于电脑的操作系统,没有这个操作系统,固然一切应用软件都无从运行,但真正能把这套基本操作系统调出来加以审视的,似乎并不是玩电脑的人能做到的。

       那为什么还说哲学无用呢?哲学的无用在于他实际上比那个操作系统潜藏得还要深,或许说,他距离精神上的应用层面更为虚渺飘远。他因此在精神底层奠定了一个深厚而坚实的基础,这就好比基础科学与应用科学,它们相距得越远,那基础科学就越显得没有用处,尽管越没有用的基础科学,最终对应用科学具有越大的奠基作用和指导力度。

2.2 中国实用哲学


      西方哲思是“无用”的,中国的实用哲学是“有用”的。

       果不其然,实用哲学很快给我们带来人带来了实用效应:政治上,我们古老的社会制度是最完善稳固的,折腾两千余年,虽然大约每隔两三百年,社会就会动乱,但是他的社会制度是不变的,你也休想彻底拆解他那千丝万缕的人治纽带和深入灵魂的专制构架,以致于一心信奉辩证运动的大哲学家马克思,都只好无奈的将这个东方怪物称为“停滞社会”。经济上,早在唐、宋、元、明的中古时代,尤其是清朝初年的“康乾盛世”时期,我国的国民生产总值曾经占到全球总产值的三分之一左右,远远高于现在美国经济独占鳌头的世界地位(约为21%),但从这里却根本不可能衍生出别具一格的现代商品经济形态。技术上,我们更是占尽了逻辑省略的便宜,指南针是基于天然磁体倾向地球磁极的偶然发现;火药是炼丹士将各种杂物随机配伍弄成的意外事故;造纸和活字印刷更是民间生产实践的产物,丝毫不比进行任何繁琐细密的逻辑算筹。


3 “牧童骑黄牛”的视觉震撼(Python代码实现)

3.1 OpenCV简介

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。 

       在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。此外,OpenCV还提供了Java、python、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。


3.2 OpenCV应用领域

计算机视觉领域方向


(1)人机互动
(2)物体识别
(3)图像分割
(4)人脸识别
(5)动作识别
(6)运动跟踪
(7)机器人
(8)运动分析
(9)机器视觉
(10)结构分析
(11)汽车安全驾驶

计算机操作底层技术


(1)图像数据的操作: 分配、释放、复制、设置和转换。 图像是视频的输入输出I/O ,文件与摄像头的输入、图像和视频文件输出)。
(2) 矩阵和向量的操作以及线性代数的算法程序:矩阵积、解方程、特征值以及奇异值等。
(3)各种动态数据结构:列表、队列、集合、树、图等。 
(4)基本的数字图像处理:滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图、图像金字塔等。 
(5)结构分析:连接部件、轮廓处理、距离变换、各自距计算、模板匹配、Hough变换、多边形逼近、直线拟合、椭圆拟合、Delaunay 三角划分等。 
(6)摄像头定标:发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计、立体对应。
(7)运动分析:光流、运动分割、跟踪。 
(8)目标识别:特征法、隐马尔可夫模型:HMM。
(9)基本的GUI:图像与视频显示、键盘和鼠标事件处理、滚动条。 
(10)图像标注:线、二次曲线、多边形、画文字。

 

3.3 "牧童骑黄牛"效果 

"""有很多种效果,本文只以模糊滤镜为例,其他的方法一样"""

    def lut_PIL(self):
        src = Image.open(self.path)
        im2 = src.filter(ImageFilter.BLUR)  # 模糊滤镜
        im2.save("1.png")

        im2 = src.filter(ImageFilter.EMBOSS)  # 浮雕效果滤镜
        im2.save("2.png")

        im2 = src.filter(ImageFilter.EDGE_ENHANCE)  # 凸显边界
        im2.save("3.png")

        im2 = src.filter(ImageFilter.EDGE_ENHANCE_MORE)  # 加倍凸显边界
        im2.save("4.png")

        im2 = src.filter(ImageFilter.FIND_EDGES)  # 只保留边界
        im2.save("5.png")

        im2 = src.filter(ImageFilter.CONTOUR)  # 铅笔画效果
        im2.save("6.png")

        im2 = src.filter(ImageFilter.SMOOTH_MORE)  # 平滑滤镜(阀值更大)
        im2.save("7.png")

3.4 Python完整代码 

# -*-coding:utf-8-*-
"""
欢迎关注微信公众号:电力系统与算法之美
"""
import cv2     #安装的时候是 opencv_python,但在导入的时候采用 import cv2。
import numpy as np
from PIL import Image, ImageFilter


class pic_imshow:
    def __init__(self, path, temp='', params=12):
        self.path = path
        self.temp = temp
        self.params = params
        # (3)利用PIL中函数实现

    """有很多种效果,本文只以模糊滤镜为例,其他的方法一样"""

    def lut_PIL(self):
        src = Image.open(self.path)
        im2 = src.filter(ImageFilter.BLUR)  # 模糊滤镜
        im2.save("1.png")

        im2 = src.filter(ImageFilter.EMBOSS)  # 浮雕效果滤镜
        im2.save("2.png")

        im2 = src.filter(ImageFilter.EDGE_ENHANCE)  # 凸显边界
        im2.save("3.png")

        im2 = src.filter(ImageFilter.EDGE_ENHANCE_MORE)  # 加倍凸显边界
        im2.save("4.png")

        im2 = src.filter(ImageFilter.FIND_EDGES)  # 只保留边界
        im2.save("5.png")

        im2 = src.filter(ImageFilter.CONTOUR)  # 铅笔画效果
        im2.save("6.png")

        im2 = src.filter(ImageFilter.SMOOTH_MORE)  # 平滑滤镜(阀值更大)
        im2.save("7.png")

    # (2)利用opencv中的函数实现
    def lut_opencv(self):
        src = cv2.imread(self.path)
        cv2.namedWindow('input', cv2.WINDOW_AUTOSIZE)
        cv2.imshow('input', src)
        dst = cv2.applyColorMap(src, self.temp)
        cv2.imshow('output', dst)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
        # (1)实现“流年”滤镜的效果:改变通道值的方法

    def fleeting(self):
        src = Image.open(self.path)
        src.show()
        img = np.asarray(Image.open(self.path).convert('RGB'))
        img1 = np.sqrt(img * [1.0, 0.0, 0.0]) * self.params
        img2 = img * [0.0, 1.0, 1.0]
        img = img1 + img2
        img = Image.fromarray(np.array(img).astype('uint8'))
        img.show()

    # (1)实现“旧电影”滤镜的效果:改变通道值的方法
    def oldFilm(self):
        src = Image.open(self.path)
        src.show()
        img = np.asarray(Image.open(self.path).convert('RGB'))
        # r=r*0.393+g*0.769+b*0.189 g=r*0.349+g*0.686+b*0.168 b=r*0.272+g*0.534b*0.131
        trans = np.array([[0.393, 0.769, 0.189], [0.349, 0.686, 0.168], [0.272, 0.534, 0.131]]).transpose()
        # clip 超过255的颜色置为255
        img = np.dot(img, trans).clip(max=255)
        img = Image.fromarray(np.array(img).astype('uint8'))
        img.show()


if __name__ == '__main__':
    path = '1.png'
    test = pic_imshow(path, cv2.COLORMAP_COOL)
    # cv2.COLORMAP_COOL可以替换为 cv2.COLORMAP_AUTUMN等或者数字
    #test.lut_PIL()
    test.lut_opencv()
    # test.fleeting()
    # test.oldFilm()

4 展望 

这个清明过得很充实,与君共勉!