RGBA四通道图像二值化后过滤非黑白像素的高效实现方法
高效实现方案
你可以直接用NumPy的向量化操作替代Python层嵌套循环,所有运算都在C层面执行,处理你这张480*640的图仅需毫秒级耗时,逻辑和你原有循环完全等价:
import numpy as np import matplotlib.pyplot as plt img = plt.imread('segm.png') # 原有大于0置1的操作 img[img > 0] = 1.0 # 按通道维度求和生成掩码 sum_channel = img.sum(axis=2) mask = (sum_channel > 1.0) & (sum_channel < 4.0) # 掩码对应位置像素统一置0 img[mask] = 0.0
如果追求更简洁的写法,也可以合并成一行操作:
img[(img.sum(axis=2) > 1.0) & (img.sum(axis=2) < 4.0)] = 0.0
原理说明
img.sum(axis=2)直接对最后一个通道维度求和,输出shape为(480, 640)的二维数组,每个值就是对应像素4个通道的总和,完全避免了Python层面的循环遍历。- 布尔掩码索引赋值也是NumPy原生的向量化操作,比双层for循环效率高2~3个数量级。
内容的提问来源于stack exchange,提问作者Marlon Teixeira
相关产品推荐
相关产品推荐

