Python将True False矩阵转换为图像

时间:2017-07-04 15:32:05

标签: python opencv

我有一个由True和False值组成的矩阵。我想将其打印为一个图像,其中所有True值都是白色,False值是黑色。矩阵称为索引。我尝试过以下方法:

indices = indices.astype(int)  #To convert the true to 1 and false to 0
indices*=255                   #To change all the 1's to 255
cv2.imshow('Indices',indices)
cv2.waitKey()

这是打印全黑图像。当我尝试打印(indices==255).sum()时,它返回值669,这意味着索引矩阵中有669个元素/像素应为白色。但我只能看到纯黑色的图像。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

据我所知,opencv表示图像为浮动矩阵,范围从0到1,或整数,其值介于该类型的最小值和最大值之间。

int没有边界(除了可以用所有可用内存表示的边界之外)。但是,如果使用np.uint8,则意味着您正在使用(无符号)字节,其中最小值为0,最大值为255。

所以有几种选择。最受欢迎的两个是:

  1. 强制转换为np.uint8,然后乘以255:

    indices = indices.astype(np.uint8)  #convert to an unsigned byte
    indices*=255
    cv2.imshow('Indices',indices)
    cv2.waitKey()
  2. 使用float表示形式:

    indices = indices.astype(float)
    cv2.imshow('Indices',indices)
    cv2.waitKey()
  3. 请注意,您也可以选择使用np.uint16来使用无符号的16位整数。在这种情况下,你将不得不乘以65'535。这种方法的优点是你可以使用任意颜色深度(虽然大多数图像格式使用24位颜色(每个通道8位),没有理由不使用48位颜色。例如,如果你正在做图像处理有光泽的杂志,然后使用更多的颜色深度可能是有益的。

    此外,即使最终结果是24位色标,人们有时可以更好地使用更高的色深来处理图像处理中的不同步骤。