将图像阵列转换为二值化图像

时间:2017-07-27 12:53:17

标签: python arrays image binary

我有一个像这样的图像数组Indice

array([[158,   0, 252, ..., 185, 186, 187],
   [254, 253, 252, ..., 188, 188, 189],
   [247, 249, 252, ..., 188, 187, 186],
   ..., 
   [176, 172, 168, ..., 204, 205, 205],
   [178, 175, 172, ..., 206, 205, 206],
   [180, 177, 174, ..., 206, 207, 207]], dtype=uint8)

我希望将Indice转换为二值化图像(0到1之间的值),并且保留在0(0.1或0.2)附近。我怎么能在Python中做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以使用np.where将数据转换为0到1之间的范围,然后再除以255

threshold = 0.2
new_indice = np.where(Indice/255>=threshold, 1, 0)

答案 1 :(得分:1)

如果布尔二进制数组适合您,您可以简单地使用numpy的逐元素比较:

new_indice = (Indice/255 > threshold)

事实上,对于随机测试数组,这似乎比np.where解决方案略快。如果你需要一个整数二进制数组,你只需在括号前添加1*,但速度优势似乎已经消失。

答案 2 :(得分:0)

执行此类任务的简便方法是使用list comprehensions

在你的情况下:

array([[1 if x>threshold else 0 for x in line] for line in Indice])

阈值将设置为您想要的值。