日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uint8_t图像数据类型介绍

發布時間:2024/3/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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;
至于類型的轉換,等遇到實際問題時再來作補充

總結

以上是生活随笔為你收集整理的uint8_t图像数据类型介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。