代码笔记15 python-opencv中imwrite的坑

问题

  问题是这样的,我简单描述一下。我在处理NYU标签图的过程中被imwrite实实在在坑了一把。我处理的是40classes的标签图,其中从matlab中读出的矩阵格式是uint16

然后我准备通过imwrite的方式将其保存为png图像

cv2.imwrite(dir, labels[:, :, i])

结果发生了一件意想不到的事,也有点后怕哈哈哈,多亏了我要去算一下median weight来做交叉熵。我发现原来的0-40共41个标签,最后只有了0-39共40类了。我感觉是因为cv2.imwrite函数的归一化方式比较奇特导致的,去看源码好像啥也没有,只有变量说明。

解决

  既然不让归一化,那就把原矩阵数据类型转换成不需要归一化的方式吧

k = np.array(labels[:, :, i], dtype='uint8')
cv2.imwrite(dir, k)

这样出来就对了

问题补充

  我去看了一眼标签分布,貌似就是0和1标签合并了,其余的都减了1。这究竟是为什么呢

posted @ 2022-06-13 21:08  The1912  阅读(383)  评论(0编辑  收藏  举报