近日学习了一下《Python科学计算最佳实践:SciPy指南》,有样学样,照虎🐯画猪🐖,小试一下。
小试过程全程使用Jupyter,非常方便,具体操作请参考拙作 Jupyter+Docker玩转《Python数据分析基础》
图像就是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
从上面输出的结果可以看到,图片的数据类型其实就是一个numpy.ndarray的二维数组,从我们打上的红色方块的位置很容易理解。
我们再修改一下参数,把红色方块打到小猪脸上
点击运行⏯
打码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(二值化(图片))
点击运行⏯
二值化图片
网友评论