Python将真假矩阵转换为图像

Sib*_*ibi 8 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()
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*sem 5

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

Anint没有边界(除了可以用所有可用内存表示的边界)。但是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()
    Run Code Online (Sandbox Code Playgroud)
  2. 使用float表示:

    indices = indices.astype(float)
    cv2.imshow('Indices',indices)
    cv2.waitKey()
    Run Code Online (Sandbox Code Playgroud)

请注意,您还可以选择使用np.uint16例如使用无符号 16 位整数。在这种情况下,您必须乘以 65'535。这种方法的优点是您可以使用任意颜色深度(尽管大多数图像格式使用 24 位颜色(每通道 8 位),但没有理由不使用 48 位颜色。例如,如果您正在处理图像处理光面杂志,然后使用更多颜色深度工作可能会有所帮助。

此外,即使最终结果是 24 位调色板,有时也可以更好地为图像处理的不同步骤使用更高的颜色深度。