OpenCV中保存不同深度图像的技巧
什么是图像深度?
很多人开始学习OpenCV之后,接触的几个方法就包括imwrite函数,而且很快知道需要传入一个ndarray类型的mat对象作为实参,常规代码如下:
imwrite("D:/result.png ", dst);#dst为mat对象,前面的实参为保存的地址
这样保存的图像默认是每个通道8位的字节图像(也就是每个通道像素点的大小为0~255),常见的RGB图像是图像深度为24,这个可以通过windows下查看图像属性获得,截图如下:
如果每个通道占16位的话,RGB图像深度就会变成48,如果每个通道占32位的话,深度就会变成96,显然图像深度越大,图像文件也会越多,加载时候消耗的内存也会越多,所以OpenCV中默认读写图像都是每个通道8位(单字节)图像。
各种不同深度图像的保存
转换之后,如果直接保存,代码如下:
#加载图像
Mat src = imread("D:/flower.png", IMREAD_UNCHANGED);
printf("depth %d \n", src.depth());#转为为16位图像
Mat dst;
src.convertTo(dst, CV_16U);
imshow("flower16", dst);
imwrite("D:/flower-16.png", dst);
转换之后,归一化之后再保存,代码如下:
# 加载图像
Mat src = imread("D:/flower.png", IMREAD_UNCHANGED);
printf("depth %d \n", src.depth());# 转为为16位图像
Mat dst;
src.convertTo(dst, CV_16U);# 归一化再保存
normalize(dst, dst, 0, 256 * 256, NORM_MINMAX);
imwrite("D:/flower-16.png", dst);
imshow("flower-16", dst);
两者效果对比如下:
# 加载图像
Mat src = imread("D:/flower.png", IMREAD_UNCHANGED);
printf("depth %d \n", src.depth());# 转为为32位图像
Mat dst;
src.convertTo(dst, CV_32F);# 归一化再保存
normalize(dst, dst, 0, 1.0, NORM_MINMAX);
imwrite("D:/flower-32.png", dst);
imshow("flower-32", dst);
对上述各种不同深度的图像,必须通过下面的方式才可以正确读取
Mat src = imread("D:/flower.png", IMREAD_UNCHANGED);
OpenCV中保存不同深度图像的技巧相关推荐
- OpenCV中利用cvConvertScale()将图像的数据类型由u8转化为64f...
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 OpenCV中利用cvConvertScale( ...
- 保存OpenCV中Mat_Vec3f格式的图像
在OpenCV中,有时会出现如Mat_<Vec3f>图像类型,直接用cvsaveImage或者imwrite保存,会出现一片黑色.保存失败: 如下 这是定义格式问题 此时,需要转换正确的格 ...
- 在OpenCV中利用卷积进行图像滤波
简 介: 本文首先讨论了卷积核的概念,以及如何用于对图像进行滤波.然后通过他们对图像进行数学运算来实现特定的效果,比如平和和锐化.展示了如何在OpenCV中实现2D滤波. 在等同卷积卷积核之后,我们创 ...
- OpenCV中的三种图像数据结构CvMat, IplImage和Mat(二)IplImage
本文为原创,若有错误欢迎批评指正! 一. IplImage结构体构成 IplImage比CvMat要复杂一些,结构体组成如下: typedef struct _IplImage { int nSize ...
- OpenCV 【一】—— OpenCV中数组指针、图像分块计算、指针取像素值与MatToEigen方法,内存对齐
{ Topic1: 高效开辟内存,使适用于大型数组.//开辟新数组,或者开辟新的0或者某一数值的数组/Mat或者Map直接使用memset //大数组操作效率较高 举例1:cv::Mat cv_ncc ...
- 使用opencv中的方法进行图像保存时,出现保存的图像全黑的问题
最近在做的工作,需要对图像进行预处理,所以在尝试学习使用opencv.今天在进行gamma校正去除阴影时,发现保存的校正后的图像是全黑的. 因为是做农业图像处理,所以就随手拍了个玉米粒的图像(如下左图 ...
- OpenCV中利用cvConvertScale()对图像数据作线性变换
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 在OpenCV的IplImage结构体char ...
- GDI+ 中发生一般性错误(在 OutputStream 中保存 PNG 格式图像时遇到的问题)
在将图片以 PNG 格式保存至 Response.OutputStream 时,会碰到如下错误: GDI+ 中发生一般性错误. 原因: 在写 PNG 格式的图像时,指针需要在存储的位置来回移动.而 R ...
- OpenCV中Mat类的图像如何设置ROI
Mat类表示的图像进行ROI操作有两种方法 (1)使用拷贝构造函数Mat(constMat& m, const Rect& roi ),矩形roi指定了兴趣区 例如: [cpp] vi ...
最新文章
- Yoshua Bengio团队通过在网络「隐藏空间」中使用降噪器以提高深度神经网络的「鲁棒性」
- mac下Android studio配置gradle的路径
- gitlab的搭建与汉化
- 车品觉 | 大数据的价值:找到别人的“集体智慧”
- 在自己笔记本电脑上如何访问虚拟机的内容、包括可以使用ssh、访问tomcat、访问nginx
- docker privileged作用_Docker环境下秒建Redis集群,连SpringBoot也整上了!
- (48)FPGA面试技能提升篇(数字采样、射频存储、频谱搬移)
- 95-10-150-启动-FetchManager
- ssm当用户登录成功显示用户名_从零到企业级SSM电商项目实战教程(十八)用户登录功能开发...
- The Python Challenge 题解
- 什么是阿里云服务器系统盘和数据盘?
- imap接收邮件服务器怎么填,邮件接收(POP3或IMAP)服务器应该填 – 手机爱问
- Ubuntu 老版本下载
- 3208点阵时钟c语言程序,点阵万年历(带时间、年月日星期调整及闹钟功能)C程序...
- Spss-系统聚类手算实操
- 安卓 新闻客户端毕业设计项目
- 【算法分析】实验 1. 基于贪心的会议安排问题
- 信息安全密码技术--栅栏密码
- 居家健康管理小能手——智能体脂秤
- 比利时一年中遭受加密货币骗局损失近1000万欧元