美文网首页呆鸟的Python数据分析
小猪🐗快跑 —— SciPy图像处理小试

小猪🐗快跑 —— SciPy图像处理小试

作者: 阿狸不歌 | 来源:发表于2019-02-16 18:35 被阅读3次

    近日学习了一下《Python科学计算最佳实践:SciPy指南》,有样学样,照虎🐯画猪🐖,小试一下。
    小试过程全程使用Jupyter,非常方便,具体操作请参考拙作 Jupyter+Docker玩转《Python数据分析基础》

    SciPy指南 封面

    图像就是NumPy数组

    %matplotlib inline
    import matplotlib.pyplot as plt
    from skimage import io
    
    #图片既可以是本地的,也可以是网络上的,今年是🐷年,所以就随便找了头健壮的小猪🐗
    图片路径 = ('http://n.sinaimg.cn/sinacn10/200/w600h400/20180420/6e53-fznefkf4674317.jpg')
    图片 = io.imread(图片路径)
    print("类型:", type(图片), "形状:", 图片.shape, "数据类型:", 图片.dtype)
    plt.imshow(图片);
    
    加载图片加载图片

    打码

    def 打码(原始图片, 左上角横坐标, 左上角纵坐标, 宽度, 高度):
        打码后图片 = 原始图片.copy()
    
        #设置方块的位置与RGB值
        打码后图片[左上角纵坐标:左上角纵坐标+高度, 左上角横坐标: 左上角横坐标+宽度] = [200, 50, 0] 
        return 打码后图片
    
    print("码左上角横坐标:", 100, " 码左上角纵坐标:", 0, " 码宽度:", 100, " 码高度:", 50)
    plt.imshow(打码(图片, 100, 0, 100, 50))
    

    点击运行⏯

    打码1打码1

    从上面输出的结果可以看到,图片的数据类型其实就是一个numpy.ndarray的二维数组,从我们打上的红色方块的位置很容易理解。

    我们再修改一下参数,把红色方块打到小猪脸上

    点击运行⏯

    打码2打码2

    网格覆盖

    def 网格覆盖(原始图片, 间隔=50):
        覆盖后的图片 = 原始图片.copy()
        覆盖后的图片[间隔:-1:间隔, :] = [255, 255, 255]  # 设置横线颜色
        覆盖后的图片[:, 间隔:-1:间隔] = [0, 0, 0]        # 设置纵线颜色
        return 覆盖后的图片
    
    plt.imshow(网格覆盖(图片, 100));
    

    点击运行⏯

    网格覆盖网格覆盖

    二值化图片

    from skimage import color
    def 二值化(原始图片):
        二值图片 = color.rgb2gray(原始图片)
        行数, 列数 = 二值图片.shape
    
        for i in range(行数):
            for j in range(列数):
                if (二值图片[i, j] <= 0.5):
                    二值图片[i, j] = 0
                else:
                    二值图片[i, j] = 1
        return 二值图片
    
    plt.imshow(二值化(图片))
    

    点击运行⏯

    二值化图片二值化图片

    相关文章

      网友评论

        本文标题:小猪🐗快跑 —— SciPy图像处理小试

        本文链接:https://www.haomeiwen.com/subject/xbcieqtx.html