转自:https://www.cnblogs.com/farewell-farewell/p/5914685.html
像素数据类型的用途:
- 比如在用.at对像素进行操作时, 为了让编译器准确的定位像素,需要知道每个像素占的内存大小, 也就是像素的数据类型; 取出位于(x,y)的元素:
im.at<像素的数据类型>(x,y)
; - 同时如果像素数据类型弄错了, 取出来数据也会是错误的,
关键是还不报错
, 会浪费大量时间调试(我在这方面以及犯了好好多次了)
像素数据类型的分类, 以及对应的Mat数据类型
1.Unsigned
8bits(一般的图像文件格式使用的大小)
IplImage数据结构参数:IPL_DEPTH_8U
CvMat数据结构参数:CV_8UC1,CV_8UC2,CV_8UC3,CV_8UC4
像素的变量类型 | 空间大小 | 范围 | 其他 |
---|---|---|---|
uchar | 8 bits | 0~255 | (OpenCV缺省变量,同等unsigned char) |
unsigned char | 8 bits | 0~255 |
2.Signed 8 bits
IplImage数据结构参数:IPL_DEPTH_8S
CvMat数据结构参数:CV_8SC1,CV_8SC2,CV_8SC3,CV_8SC4
像素的变量类型 | 空间大小 | 范围 |
---|---|---|
char | 8 bits | -128~127 |
3.Unsigned 16 bits
IplImage数据结构参数:IPL_DEPTH_16U
CvMat数据结构参数:CV_16UC1,CV_16UC2,CV_16UC3,CV_16UC4
像素的变量类型 | 空间大小 | 范围 | 其他 |
---|---|---|---|
ushort | 16 bits | 0~65535 | (OpenCV缺省变量,同等unsigned short int) |
unsigned short in | 16 bits | 0~65535 |
4.Signed 16 bits
IplImage数据结构参数:IPL_DEPTH_16S
CvMat数据结构参数:CV_16SC1,CV_16SC2,CV_16SC3,CV_16SC4
像素的变量类型 | 空间大小 | 范围 | 其他 |
---|---|---|---|
short int | 16 bits | -32768~32767 | (short) |
5.Signed 32 bits
IplImage数据结构参数:IPL_DEPTH_32S
CvMat数据结构参数:CV_32SC1,CV_32SC2,CV_32SC3,CV_32SC4
像素的变量类型 | 空间大小 | 范围 | 其他 |
---|---|---|---|
int | 32 bits | -2147483648~2147483647 | (long) |
6.Float 32 bits
IplImage数据结构参数:IPL_DEPTH_32F
CvMat数据结构参数:CV_32FC1,CV_32FC2,CV_32FC3,CV_32FC4
像素的变量类型 | 空间大小 | 范围 | 其他 |
---|---|---|---|
float | 32 bits | 1.18 ~3.40 |
7.Double 64bits
CvMat数据结构参数:CV_64FC1,CV_64FC2,CV_64FC3,CV_64FC4
像素的变量类型 | 空间大小 | 范围 | 其他 |
---|---|---|---|
double | 64 bits | 2.23 ~1.79 |
8.Unsigned 1bit
IplImage数据结构参数:IPL_DEPTH_1U
像素的变量类型 | 空间大小 | 范围 | 其他 |
---|---|---|---|
bool | 1 bits | 0~1 |