呆鸟的Python数据分析

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

2019-02-16  本文已影响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(二值化(图片))

点击运行⏯

二值化图片二值化图片
上一篇下一篇

猜你喜欢

热点阅读