我有一个由 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 个元素/像素应该是白色的。但我只能看到纯黑色的图像。我怎样才能解决这个问题?
据我所知,opencv
将图像表示为范围从 0 到 1 的浮点数矩阵,或值介于该类型的最小值和最大值之间的整数。
Anint
没有边界(除了可以用所有可用内存表示的边界)。但是np.uint8
,如果您使用,则意味着您正在使用(无符号)字节,其中最小值为 0,最大值为 255。
所以有几种选择。最受欢迎的两个是:
投射到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)使用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 位调色板,有时也可以更好地为图像处理的不同步骤使用更高的颜色深度。
归档时间: |
|
查看次数: |
6575 次 |
最近记录: |