什么是图像深度?

  很多人开始学习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中保存不同深度图像的技巧相关推荐

  1. OpenCV中利用cvConvertScale()将图像的数据类型由u8转化为64f...

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 OpenCV中利用cvConvertScale( ...

  2. 保存OpenCV中Mat_Vec3f格式的图像

    在OpenCV中,有时会出现如Mat_<Vec3f>图像类型,直接用cvsaveImage或者imwrite保存,会出现一片黑色.保存失败: 如下 这是定义格式问题 此时,需要转换正确的格 ...

  3. 在OpenCV中利用卷积进行图像滤波

    简 介: 本文首先讨论了卷积核的概念,以及如何用于对图像进行滤波.然后通过他们对图像进行数学运算来实现特定的效果,比如平和和锐化.展示了如何在OpenCV中实现2D滤波. 在等同卷积卷积核之后,我们创 ...

  4. OpenCV中的三种图像数据结构CvMat, IplImage和Mat(二)IplImage

    本文为原创,若有错误欢迎批评指正! 一. IplImage结构体构成 IplImage比CvMat要复杂一些,结构体组成如下: typedef struct _IplImage { int nSize ...

  5. OpenCV 【一】—— OpenCV中数组指针、图像分块计算、指针取像素值与MatToEigen方法,内存对齐

    { Topic1: 高效开辟内存,使适用于大型数组.//开辟新数组,或者开辟新的0或者某一数值的数组/Mat或者Map直接使用memset //大数组操作效率较高 举例1:cv::Mat cv_ncc ...

  6. 使用opencv中的方法进行图像保存时,出现保存的图像全黑的问题

    最近在做的工作,需要对图像进行预处理,所以在尝试学习使用opencv.今天在进行gamma校正去除阴影时,发现保存的校正后的图像是全黑的. 因为是做农业图像处理,所以就随手拍了个玉米粒的图像(如下左图 ...

  7. OpenCV中利用cvConvertScale()对图像数据作线性变换

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 在OpenCV的IplImage结构体char ...

  8. GDI+ 中发生一般性错误(在 OutputStream 中保存 PNG 格式图像时遇到的问题)

    在将图片以 PNG 格式保存至 Response.OutputStream 时,会碰到如下错误: GDI+ 中发生一般性错误. 原因: 在写 PNG 格式的图像时,指针需要在存储的位置来回移动.而 R ...

  9. OpenCV中Mat类的图像如何设置ROI

    Mat类表示的图像进行ROI操作有两种方法 (1)使用拷贝构造函数Mat(constMat& m, const Rect& roi ),矩形roi指定了兴趣区 例如: [cpp] vi ...

最新文章

  1. Yoshua Bengio团队通过在网络「隐藏空间」中使用降噪器以提高深度神经网络的「鲁棒性」
  2. mac下Android studio配置gradle的路径
  3. gitlab的搭建与汉化
  4. 车品觉 | 大数据的价值:找到别人的“集体智慧”
  5. 在自己笔记本电脑上如何访问虚拟机的内容、包括可以使用ssh、访问tomcat、访问nginx
  6. docker privileged作用_Docker环境下秒建Redis集群,连SpringBoot也整上了!
  7. (48)FPGA面试技能提升篇(数字采样、射频存储、频谱搬移)
  8. 95-10-150-启动-FetchManager
  9. ssm当用户登录成功显示用户名_从零到企业级SSM电商项目实战教程(十八)用户登录功能开发...
  10. The Python Challenge 题解
  11. 什么是阿里云服务器系统盘和数据盘?
  12. imap接收邮件服务器怎么填,邮件接收(POP3或IMAP)服务器应该填 – 手机爱问
  13. Ubuntu 老版本下载
  14. 3208点阵时钟c语言程序,点阵万年历(带时间、年月日星期调整及闹钟功能)C程序...
  15. Spss-系统聚类手算实操
  16. 安卓 新闻客户端毕业设计项目
  17. 【算法分析】实验 1. 基于贪心的会议安排问题
  18. 信息安全密码技术--栅栏密码
  19. 居家健康管理小能手——智能体脂秤
  20. 比利时一年中遭受加密货币骗局损失近1000万欧元

热门文章

  1. intra-mart introduction
  2. win10 Ubuntu双系统 + 固态硬盘升级 (暗影精灵3)
  3. MyBatis-Plus 之自定义sql
  4. 人生何处不相逢谐音歌词
  5. grpc实例之Python实现
  6. ajax请求无法下载文件
  7. 洛谷P1786 帮贡排序(冒泡排序法)
  8. Nuxt作为主应用集成qiankun,SKIP_BECAUSE_BROKEN报错
  9. 如何在 docker 容器内部运行 docker命令
  10. 电商网站架构探索|SOA分布式架构详解