python图像处理,float[0.0, 1.0]转uint8[0, 255],cv2.imwrite()图像全黑问题


先上代码

img*=250.0
img = img.astype(np.uint8)

一、问题描述

cv2.imshow()能显示图像,但cv2.imwrite()保存的图片是近乎全黑的imwrite()
print(img),部分截图如下
在这里插入图片描述

查看图片数组的 数据类型

print(img.dtype)

现在的格式是float32,本应该要是0-255的整数才行,使用cv2.imwrite()保存能正常cv.imshow的图像是近乎全黑的,然后我后面处理完的图像都错乱了,
在这里插入图片描述
找了好久也没找到合适的答案,可能是我太菜了,这种小问题没人在意。。。
最后看了uint8转float之后发现就是把0-255的整数转成1/255倍的0-1浮点数,于是我按照这种思路把代码改了一下,原代码在哪看的忘了,在一段代码里面发现的两行,懒得贴了。

二、解决方法

转换一下图片数组的数据类型就好了,float[0.0 - 1.0]数据格式的图片img*255.0,再转成uint8[0-255]
代码(python):

img*=250.0
img = img.astype(np.uint8)

看一下结果

//查看数据类型
print(img.dtype)
//图片是否是cv2格式
print("cv2? ",isinstance(img,np.ndarray))

在这里插入图片描述
后续的处理也正常了,最后正常显示处理结果。
在这里插入图片描述

  • 21
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值