OpenCV对IplImage类中图像深度的理解
2015-02-02 16:50
155 查看
opencv的IplImage结构中有这么一个成员:depth。
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
在处理一些需要图像相加运算的操作时,通常定义
IplImage* dst = cvCreateImage(cvGetSize(img),IPL_DEPTH_64F,img->nChannels);
当处理完成后,需要对原这个IPL_DEPTH_64F深度的图像进行显示的时候,就需要做一些转换。可以用cvScale()这个函数,这个函数主要是对图像做线性变换。如果不转换的话,可以发现显示的图像是全白的。这是由于IPL_DEPTH_64F类型的图片显示范围为[0,1]。
cvScale(dst, dst, 1.0/(M-m), 1.0*(-m)/(M-m));//图像数据转换到[0,1]区间
这个时候就可以正常的显示图像了。当需要在不同深度的图像之间转换时,也可以用cvScale()这个函数。这个时候的转换,中间有个截断处理过程。比如IPL_DEPTH_64F到IPL_DEPTH_8U,就会把300转换到255。
这个时候如果需要保存图像,请记住要先转换到IPL_DEPTH_8U的深度。
从文件或摄像头直接读取的图像一般都是8U的,当有特殊计算需求时可以用cvScale() 或cvCvtScale() 转换。
不同的深度其取值范围不一样:
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_32F
要用:cvConvertScale(pImg8, pImg32, 1.0/255, 0); 要除255
反过来IPL_DEPTH_32F 到 IPL_DEPTH_8U
要用:cvConverScale(pImg32, pImg8, 255, 0);要乘以255
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
在处理一些需要图像相加运算的操作时,通常定义
IplImage* dst = cvCreateImage(cvGetSize(img),IPL_DEPTH_64F,img->nChannels);
当处理完成后,需要对原这个IPL_DEPTH_64F深度的图像进行显示的时候,就需要做一些转换。可以用cvScale()这个函数,这个函数主要是对图像做线性变换。如果不转换的话,可以发现显示的图像是全白的。这是由于IPL_DEPTH_64F类型的图片显示范围为[0,1]。
cvScale(dst, dst, 1.0/(M-m), 1.0*(-m)/(M-m));//图像数据转换到[0,1]区间
这个时候就可以正常的显示图像了。当需要在不同深度的图像之间转换时,也可以用cvScale()这个函数。这个时候的转换,中间有个截断处理过程。比如IPL_DEPTH_64F到IPL_DEPTH_8U,就会把300转换到255。
这个时候如果需要保存图像,请记住要先转换到IPL_DEPTH_8U的深度。
从文件或摄像头直接读取的图像一般都是8U的,当有特殊计算需求时可以用cvScale() 或cvCvtScale() 转换。
不同的深度其取值范围不一样:
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_32F
要用:cvConvertScale(pImg8, pImg32, 1.0/255, 0); 要除255
反过来IPL_DEPTH_32F 到 IPL_DEPTH_8U
要用:cvConverScale(pImg32, pImg8, 255, 0);要乘以255
相关文章推荐
- OpenCV不同图像深度类型的理解
- opencv里的norm范数和图像里的深度和通道数的理解和意义和相机标定后对内外参数的质量评估
- OpenCV处理kinect深度图,获取手掌骨架图像
- [Mo]OpenNI+OpenCV处理kinect深度图,获取手掌骨架图像
- opencv 图像的深度和通道介绍
- opencv中图像的通道、深度的解释
- OpenCV中图片数据的内存管理:图像深度复制与浅复制
- OpenCV对不同图像深度的处理
- opencv 图像深度(depth)
- Kinect 2 SDK + OpenCV 获取深度彩色图像
- OpenCV对不同图像深度的处理
- OpenCV2 使用分水岭算法对图像分割的个人理解 cv::watershed()
- OpenCV中图像深度
- opencv图像基础(1)图像深度
- OpenCV--鼠标响应Kinect彩色图像显示深度信息
- OpenNI结合OpenCV显示Kinect彩色、深度及融合图像
- opencv图像深度
- javascript图像处理―仿射变换深度理解
- OpenCV 2 学习笔记(4): 加载,显示和保存图像,Mat类与IplImage类
- [Mo]OpenNI+OpenCV处理kinect深度图,获取手掌骨架图像