使用OpenCV和NumPy处理图像数据时,出现显示异常,图片经常出现空白

1 前言

还是想念Java,希望Java能吸收Python的特性,变得更加强大!

2 问题描述

今天在用NumPy库处理图像数据时,出现一个问题,任务是需要写一个中值滤波的算法,算法其实不是很难,不过写完之后图片总是空白的,我还以为是我算法写错了,(不过的确代码存在Bug),对图像进行中值滤波之后,滤波后的图像就变成了一偏空白,我也不知道是怎么回事;后来对代码进行调试,发现,使用“img_Padding[mStart:mStart+m, nStart:nStart+n] = img”赋值之后,img_Padding数据再显示出来,就变成一片空白了,这是为什么呢?

3 解决方案

这里面的原因比较复杂,主要原因是跟Python的特性相关,通过调试我们可以发现,img二维数组的数据类型一直是numpy.uint8类型,而经过“img_Padding[mStart:mStart+m, nStart:nStart+n] = img”赋值语句之后,img_Padding却显示是numpy.float64类型,那到底是哪里出了问题了呢?

问题就在于,我在初始化img_Padding的时候,使用的是np.zeros()函数,而np.zeros()函数在默认情况下(即没有显式设置数据类型的情况下),创建的是float类型的数组,所以这才导致img_Padding是numpy.float64类型。这种情况可以通过函数来进行数据类型的转换,代码如下:

img = np.array(img).astype('uint8')

但这其实不是最好的解决方案,最好的解决方式是在初始化img_Padding时,使用np.zeros_like()函数。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值