今天在做数据增强的时候,遇到一个奇怪的问题.调用imwite生成的图片,在本地用图片查看器打开的时候是正常的.但是在代码里imshow的时候是一片亮白.

代码类似如下

        gaussian_img = add_gaussian_noise(img_mat) #gaussian_img的数据类型是float32的

        new_img_name = img_name.replace(".png","gauss{}.png".format(seq))
seq += 1
cv2.imwrite(new_img_name, gaussian_img) #这里从本地磁盘打开这个保存的图片,看着是正常的. draw_box(gaussian_img,new_label_file) #这里会调用imshow('',gaussian_img)看起来就是一片亮白

上面效果类似

不管imwrite传入的矩阵的类型是什么样的(float32或者uint8),imwrite都会把它转换成0(black)-255(white)的整数.

https://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html#imwrite

The function imwrite saves the image to the specified file. The image format is chosen based on the filename extension (see imread() for the list of extensions). Only 8-bit (or 16-bit unsigned (CV_16U) in case of PNG, JPEG 2000, and TIFF) single-channel or 3-channel (with ‘BGR’ channel order) images can be saved using this function. If the format, depth or channel order is different, use Mat::convertTo() , and cvtColor() to convert it before saving

但是imshow的处理机制是不一样的,如果imshow传入的矩阵的类型是float32的话,它认为float的范围应该是0.0(black) - 1.0(white)

所以当直接imwite的时候,打开本地图片查看是正常的.但是imshow显示的图片就是一片亮白. 之前用别的方式做数据增强的时候没遇到这个问题,是因为数据类型一直用的uint8.

那如何修正这个问题呢?

imshow传入imshow('',gaussian_img/255.)而不是imshow('',gaussian_img)

那imwrite()的时候传入imwrite(gaussian_img/255.)行不行呢?答案是不行,原因前面说过了,imwrite会将其转换为0-255.gaussian_img/255的话,矩阵中的每个元素的值变成了0.0-1.0,再传入imwrite,每个元素的值都会转变为0,这样磁盘上保存下来的就是一副全黑的图像了.

最新文章

  1. angularjs中$watch监听model(对象属性、对象)变化
  2. stm32——NFC芯片--PN532的使用
  3. 面试之jsp、Servlet相关知识——生命周期, 区别等
  4. Java中 static/transient,final/volatile 说明
  5. sql server 还原数据库时提示数据库正在使用,无法进行操作的解决方法
  6. TCP/UDP详解
  7. Connecting Physics Bodies
  8. 利用 Heritrix 构建特定站点爬虫
  9. git 使用小结
  10. 手势识别官方教程(7)识别缩放手势用ScaleGestureDetector.GestureDetector和ScaleGestureDetector.SimpleOnScaleGestureListener
  11. Book of Evil
  12. 如何去掉textarea右下角的灰色角标?
  13. WPF笔记(2.7 文字布局)——Layout
  14. asp.net + Jquery 实现类似Gridview功能 (一)
  15. “挑三拣四”地学一学Java I/O
  16. Nodejs初识随笔
  17. Java 多线程并发编程面试笔录一览
  18. [原][osgEarth][JSBSim]重新整理使用JSBSim飞机动力模拟的使用
  19. 查看cookie的快捷方法
  20. stop-hbase.sh一直处于等待状态

热门文章

  1. MyBatis 接口多参数的处理方法
  2. Unable to start services through AMBARI UI
  3. 洛谷P1690 贪婪的Copy 题解
  4. HashSet源码分析:JDK源码系列
  5. hexo-theme-yilia使用遇到的问题
  6. C#3.0新增功能09 LINQ 标准查询运算符 01 概述
  7. Android解决RecyclerView中的item显示不全方案
  8. linux初学者-虚拟机管理篇
  9. python基础——元组(tuple)
  10. .net持续集成sonarqube篇之 sonarqube触发webhook