imwrite imshow机制
今天在做数据增强的时候,遇到一个奇怪的问题.调用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,这样磁盘上保存下来的就是一副全黑的图像了.
imwrite imshow机制的更多相关文章
- opencv的学习笔记1
想在周末去游泳,找了些游泳的注意事项什么的,想想还没干正事,就来继续看看opencv的使用吧,晚上看了opencv的一些基本入门的东西,打算下面主要总结CSDN上一个大牛的博文,链接如下:http:/ ...
- imread函数、namedWindow函数、imshow函数、imwrite函数
1.imread函数 首先,我们看imread函数,可以在OpenCV官方文档中查到其原型如下: Mat imread(const string& filename, int flags=1 ...
- 机器学习进阶-图像基本操作-图像数据读取 1.cv2.imread(图片读入) 2.cv2.imshow(图片展示) 3.cv2.waitKey(图片停留的时间) 4.cv2.destroyAllWindows(清除所有的方框界面) 5.cv2.imwrite(对图片进行保存)
1. cv2.imread('cat.jpg', cv2.IMGREAD_GRAYSCALE) # 使用imread读入图像(BGR顺序), 使用IMGREAD_GRAYSCALE 使得读入的图片为 ...
- OpenCV学习笔记——imread、imwrite以及imshow
1.imread Loads an image from a file. 从文件中读取图像. C++: Mat imread(const string& filename, int flags ...
- Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()
为什么使用Python-OpenCV? 虽然python 很强大,而且也有自己的图像处理库PIL,但是相对于OpenCV 来讲,它还是弱小很多.跟很多开源软件一样OpenCV 也提供了完善的pytho ...
- opencv —— imread、namedWindow & imshow、cvtColor、imwrite 加载、显示、修改、保存图像
加载图像:imread 函数 Mat imread(const string& filename, int flags = 1): filename:需要载入的图像的路径名. flags:加载 ...
- 输出图像到文件 imwrite()[OpenCV 笔记7]
bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector& ...
- MATLAB中imshow()和image()
MATLAB中imshow()和image(): IMSHOW Display image in Handle Graphics figure. IMSHOW(I) displays the gray ...
- 『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上
GAN网络架构分析 上图即为GAN的逻辑架构,其中的noise vector就是特征向量z,real images就是输入变量x,标签的标准比较简单(二分类么),real的就是tf.ones,fake ...
随机推荐
- 我的it博客开张啦
今天怀着激动地心情,在这里写下第一篇开博.之前也在新浪.网易等申请过博客,并且将新浪博客作为我的个人技术博客,当有一天看到cnblog时,觉得这里的博客以一本精美的书的批复呈现时,顿觉得很有...咋说 ...
- ASP.NET CORE 入门教程(附源码)
ASP.NET CORE 入门教程 第一课 基本概念 基本概念 Asp.Net Core Mvc是.NET Core平台下的一种Web应用开发框架 符合Web应用特点 .NET Core跨平台解决方案 ...
- redux、react-redux、redux-thunk、redux-saga使用及dva对比
一.redux使用 Redux的核心概念其实很简单:将需要修改的state都存入到store里,发起一个action用来描述发生了什么,用reducers描述action如何改变state tree ...
- 洛谷P3905 道路重建
题目:https://www.luogu.org/problemnew/show/P3905 分析: 此题是显然的最短路算法,只是看到一起删掉的一堆边感到十分棘手,而且还要求出的是最短添加边的总长度 ...
- 数据结构与算法基础之malloc()动态分配内存概述
动态内存分配和释放: 动态构造一维数组: 假设动态构造一个Int型数组: int *p = (int *)malloc(int len); //还可以写作: int *p = (int *)mallo ...
- 脱壳系列_0_FSG壳_详细版
---恢复内容开始--- 1 查看信息 使用ExeInfoPe查看此壳程序 可以看出是很老的FSG壳. 分析: Entry Point : 000000154,熟悉PE结构的知道,入口点(代码)揉进P ...
- 【iOS】Interface Builder 预览
Interface Builder 为最顶层视图提供了 Simulated Metrics,预览用户界面的各种外观设置效果,例如顶部有导航栏或底部有标签栏的效果,如图所示:
- 快速安装k8s,版本为1.13.8
利用rpm快速部署k8s #!/bin/bash #快速安装k8s #by love19791126 107420988@qq.com pwd=$(pwd) masteripaddr=#(ip a s ...
- 10个常用的linux的命令
以下就是今天我们要介绍的Linux命令: man touch, cat and less sort and grep cut sed tar find diff uniq chmo ...
- Adapter适配器模式--图解设计模式
第二章: Adapter 模式 Adapter模式分为两种: 1.类适配器模式 2.委托适配器 我看的是<图解设计模式>这本书,这小鬼子说的话真难懂,只能好好看代码理解. 先说适配器模式要 ...