opencv imwrite保存图片花屏的问题

  • 问题:在项目中用opencv的imwrite保存图片出现花屏的问题,如下图:

  • 思路:
    1.  因为项目中的图像数据(float类型,0-255)是在GPU中,保存的话:可以用CPU保存图片,也可以用GPU保存图片。GPU保存图片没有花屏的现象,因此,初步怀疑,是因为数据从GPU拷贝到CPU的时候丢了。
        后来测试,发现拷贝到CPU的数据,再拷回GPU保存依然没有问题。
    2. 后来发现,将需要保存的图片格式改为CV_32F3C后,保存不存在问题。而之前CV_8U3C的就会出现花屏,赋值的话就是简单的将float的值赋给像素点。

  • 解决方法:
    1. 利用opencv的convertTo函数,对Mat的格式进行转换:
     
     2. 若想直接赋值:观察之前的花屏的图像,是白色和黑色的附近出现花屏。因此,很有可能与0和255附近的溢出有关:
        
        这个地方我也不太明白:自己写的clip_value也是处理0-255之前的越界问题,不行,出现花屏。改为opencv自带的saturate_cast便可以了,但网上说saturate_cast的原理就是小于0的赋值0,大于255的赋值255.
        在网上看见有一个人和我遇到相似的情况,mark一下:http://blog.csdn.net/mjlsuccess/article/details/12401839
posted @ 2017-12-11 16:33  mengmee  阅读(1707)  评论(0编辑  收藏  举报