YCbCr转RGB为全蓝或全绿

问题描述:

进行超分辨率重建,需要在YCbCr中的Y通道进行,但我们也要保存Cb和Cr通道的数据,到最后一部将它们合并起来。

具体的YCbCr转RGB公式为:

ycbcr2rgb = np.zeros(ima.shape)

ycbcr2rgb[:,:,0] = 1.164383 * (ima_y-16) + 1.596027 * (ima_cr-128)
ycbcr2rgb[:,:,1] = 1.164383 * (ima_y-16) - 0.391762 * (ima_cb-128)- 0.812969 * (ima_cr-128)
ycbcr2rgb[:,:,2] = 1.164383 * (ima_y-16) + 2.017230 * (ima_cb-128)

我们得到了ycbcr2rgb之后,然后想把它输出来看一下,无论plt.show()还是save(),来看结果,图像都是一片蓝或者一片绿。

探索过程:

1.我把Y,Cb,Cr通道都打印出来,发现他们的值很大,超过255
2.我把Y,Cb,Cr显示成图像,发现都能正常显示
3.我把Cb和Cr的值从数据预处理到最后合成之前的所有过程都打印出来看一下,发现并 没有变化
4.以为图像保存方式错了导致的问题,将图像有FloatTensor转为nunpy,再把范围规范到0-255,把类型转成uint8,最后Image.fromarray(output)转为PIL格式进行保存,但还是没办法解决问题
5.不知道为什么Y的值那么大,以为网络出了问题,其实把网络改了下还是不管用,值照样那么大
。。。。。。经过无数次实验

解决办法:

原来YCbCr转RGB或RGB转YCbCr都需要满足一个前提条件,就是两者都是在0-255这么范围,是三个通道都要在这个范围(我当时只规范了一个通道,所以pass了这个解决办法),后面看到需要满足这样一个条件才能进行转换,试了下,图片不再是全蓝或全绿的了,能够显示正常!

所以,注意一些函数的使用条件,避免调试都调一天,心累啊~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值