您的位置:首页 > 运维架构

opecncv不同深度图像的转换(IPL_DEPTH_8U和IPL_DEPTH_32F)

2014-02-21 16:58 1636 查看
转载地址:http://blog.csdn.net/yihandk666/article/details/7612756

由于在很多的图片使用过程中会经常使用到各种转换,有些图片的处理需要在特定的深度下才能完成,所以深度转换是经常会用到的,如果不注意这点的话,会很容易出错的。

opencv的IplImage结构中有这么一个成员:depth。

其取值如下:

枚举值

用%d输出 二进制
IPL_DEPTH_8U : 8 : 0x0000 0008

IPL_DEPTH_8S :

-2147483640 : 0xffff fff8
IPL_DEPTH_16U : 16 : 0x0000 0010

IPL_DEPTH_16S : -2147483632 : 0xffff fff0

IPL_DEPTH_32S : -2147483616 : 0xffff ffe0

IPL_DEPTH_32F : 32 : 0x0000 0020

IPL_DEPTH_64F : 64 : 0x0000 0040

从文件或摄像头直接读取的图像一般都是8U的

当有特殊计算需求时可以用cvScale() 或cvCvtScale() 转换。

保存时必须转换回8U!

不同的深度其取值范围不一样:

0.0--1.0之间

IPL_DEPTH_64F
0.0--1.0之间

IPL_DEPTH_32F
0--65535之间

IPL_DEPTH_32S
-32768--32767之间

IPL_DEPTH_16S
0--65535之间

IPL_DEPTH_16U
-128--127之间

IPL_DEPTH_8S
0--255之间

IPL_DEPTH_8U

不同深度图像的转换:

要注意范围

比如IPL_DEPTH_8U 转到 IPL_DEPTH_32U

要用cvConvertScale(pImg8, pImg32, 1.0/255, 0); 要除255

反过来IPL_DEPTH_32F 到 IPL_DEPTH_8U

要:cvConverScale(pImg32, pImg8, 255, 0);要乘以2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: