1. 从单通道图片中筛选颜色
场景:从一张 palette 图片(索引图片)中筛选索引值为 6
的水体(其他的单通道图片,如灰度图,处理方法相似)
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
# 读取图片
ann = np.array(Image.open(ann_first))
# 生成与原图同等大小的,由 true/false 组成的矩阵
# 索引值为 6 时,为 true
water_filtered = (ann[:, :]==6)
# 拷贝图片
water = ann.copy()
# true 时,保留原值
water[:, :] = water[:, :] * water_filtered
# 显示图片
plt.imshow(water)
2. 从多通道图片中筛选颜色
场景:从一张 RGB 图片中筛选红色 (255, 0, 0)
,其他多通道图处理方法类似
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
ann = np.array(Image.open(ann_first))
# 分别过滤 通道 R, G, B
red_filtered = (ann[:, :, :]==(255, 0, 0))
# 在提取一定范围的颜色时,可以将 == 调整为 < 或 >
# red_filtered = (ann[:, :, 0]==255)&(ann[:, :, 1]==0)&(ann[:, :, 2]==0)
red = ann.copy()
red[:, :, :] = red[:, :, :] * red_filtered
# red[:, :, 0] = red[:, :, 0] * red_filtered
# red[:, :, 1] = red[:, :, 1] * red_filtered
# red[:, :, 2] = red[:, :, 2] * red_filtered
plt.imshow(red)
3. 扩展
关于一定范围内的颜色筛选可以参考 OpenCV 中 inrange 方法,或者也可以将文中两种方法的 “等于” 调整为 ”大于“ 或 ”小于“ 。
4. 参考
Image Processing with Python — Color Isolation for Beginners | by Tonichi Edeza | Towards Data Science: https://towardsdatascience.com/image-processing-with-python-color-isolation-for-beginners-3b472293335b
- 文章系个人学习总结,希望可以给大家带来些许启发,欢迎提出建议或给予指正。
- 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
- 欢迎大家转载分享,转载请标明源地址,谢谢