uint8_t图像数据类型介绍

0. C++基础类型介绍

名称字节长度取值范围
bool1false, true
char1-128 ~ 127
signed char1-128 ~ 127
unsigned char10 ~ 255
short(signed short)2-215 ~ 215- 1
unsigned short20 ~ 216- 1
int(signed int)4-231 ~ 231- 1
unsigned int40 ~ 232 - 1
long(signed long)4-231 ~ 231 - 1
long long8-263 ~ 263 - 1
unsigned long40 ~ 232 - 1
float4-3.4 * 10-38 ~ 3.4 * 1038
double8-1.79 * 10-308 ~ 1.7 * 10308

C++的主要数据类型,主要分为三类,布尔型、整型(char型从本质上说,也是种整型类型,它是长度为1的整数,通常用来存放字符的ASCII码)、浮点型。而*_t是typedef定义的表示标志,是结构的一种标注。即我们所看到的uint8_t、uint16_t、uint32_t都不是新的数据类型,而是通过typedef给类型起的别名。很明显的可以看出:uint8_t是用一个字节表示的;uint16_t是用两个字节表示的;uint32_t是用4个字节表示的。比如:

typedef signed char				int8_t;
typedef short int				int16_t;
typedef int 					int32_t;

typedef unsigned char			uint8_t;
typedef unsigned short int		uint16_t;
typedef unsigned int			uint32_t;

1.图像数据类型uint8_t

从上面可以得知,uint8_t的定义是unsigned char,数据范围在0~255之间,非常适合于存放图像数据。比如我们通过opencv读取一幅灰度影像,可以用一个uint8数组来保存灰度影像每个像素的灰度值。

cv::Mat img = cv::imread(path, cv::IMREAD_GRAYSCALE);
const int32_t width = static_cast<uint32_t>(img.cols);
const int32_t height = static_cast<uint32_t>(img.rows);

uint8_t bytes = new uint8_t[width * height];

for(int i = 0; i < height; i++){
   for(int j = 0; j < width; j++){
      bytes[i * width + j] = img.at<uint8_t>(i,j);
   }
}

当我们想输出uint8_t整型值来看时,总是会得不到我们想看到的整形值。这是因为<<操作符有一个重载版本是ostream & operator <<(ostream&, unsigned char),它会将unsigned char类型的参数经过ASCII码值转换输出对应的字符,要是想输出整形值而非字符,其实也很简单,在输出的时候将uint8_t转换成unsigned int类型就可以了,可以用下面的输出语句:

std::cout << unsigned(a) << std::endl;
//或者
std::cout << +a << std::endl;
std::cout << a+0 << std::endl;

至于类型的转换,等遇到实际问题时再来作补充
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值