opencv-图像位深度

类似CV_8UC1是Mat的类型,其定义为type = CV_(位数)+(数据类型)+(通道数)。

CV_8UC1=0    CV_8UC2=8    CV_8UC3=16   CV_8UC4=24  ————depth:0
CV_8SC1=1     CV_8SC2=9    CV_8SC3=17    CV_8SC4=25  ————depth:1
CV_16UC1=2    CV_16UC2=10    CV_16UC3=18   CV_16UC4=26  ————depth:2
CV_16SC1=3   CV_16SC2=11   CV_16SC3=19   CV_16SC4=27  ————depth:3
CV_32SC1=4   CV_32SC2=12   CV_32SC3=20   CV_32SC4=28  ————depth:4
CV_32FC1=5   CV_32FC2=13   CV_32FC3=21   CV_32FC4=29  ————depth:5
CV_64FC1=6   CV_64FC2=14   CV_64FC3=22   CV_64FC4=30  ————depth:6

这里U(unsigned integer)表示的是无符号整数,S(signed integer)是有符号整数,F(float)是浮点数。 
例如:CV_16UC2,表示的是元素类型是一个16位的无符号整数,通道为2. 
C1,C2,C3,C4则表示通道数是1,2,3,4 

elemSize 
矩阵一个元素占用的字节数,例如:type是CV_16SC3,那么elemSize = 3 * 16 / 8 = 6 bytes

elemSize1 
矩阵元素一个通道占用的字节数,例如:type是CV_16CS3,那么elemSize1 = 16  / 8 = 2 bytes = elemSize / channels

data  uchar型的指针。Mat类分为了两个部分:矩阵头和指向矩阵数据部分的指针,data就是指向矩阵数据的指针。

 

矩阵数据类型

– CV_(S|U|F)C
S = 符号整型 U = 无符号整型 F = 浮点型

CV_8UC1 是指一个8位无符号整型单通道矩阵,
CV_32FC2是指一个32位浮点型双通道矩阵
CV_8UC1 CV_8SC1 CV_16U C1 CV_16SC1
CV_8UC2 CV_8SC2 CV_16UC2 CV_16SC2
CV_8UC3 CV_8SC3 CV_16UC3 CV_16SC3
CV_8UC4 CV_8SC4 CV_16UC4 CV_16SC4
CV_32SC1 CV_32FC1 CV_64FC1
CV_32SC2 CV_32FC2 CV_64FC2
CV_32SC3 CV_32FC3 CV_64FC3
CV_32SC4 CV_32FC4 CV_64FC4

其中,通道表示每个点能存放多少个数,类似于RGB彩色图中的每个像素点有三个值,即三通道的。
图片中的深度表示每个值由多少位来存储,是一个精度问题,一般图片是8bit(位)的,则深度是8.

convertScaleAbs

  • 0-255 :CV_8U类型图片
  • 0-65535: CV_16U类型图片
  • 0-1: CV_32F类型图片

深度显示范围:(说当定义了如下不同深度的时候,像素的灰度值要处于显示范围之中才可以显示出来。否则要进行转换)

     测试double型:0.0--1.0之间                              IPL_DEPTH_64F

      测试float型:0.0--1.0之间                                  IPL_DEPTH_32F

      测试long型:0--65535之间                                IPL_DEPTH_32S        

      测试short int型:-32768--32767之间                 IPL_DEPTH_16S        

      测试unsigned short int型:0--65535之间           IPL_DEPTH_16U

      测试char型:-128--127之间                               IPL_DEPTH_8S          

      测试unsigned char型: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); 要乘以255。

Mat depth1;
depth.convertTo(depth1,CV_16U,1.0/500);
convertTo 用于将对象图像像素格式转换为指定像素格式。 
第三个参数为缩放因子,即图像每个像素值除以500,注意为double类型

 

你可能感兴趣的:(【OpenCV】)