matlab int8 矩阵,unit8_matlab数据类型转换——int8转换成unit8
在一個驅動程序中看到uint16,uint32,unit8,int8...
uint16 :無符號16bit整數,
uint32:無符號32bit整數,
unit8:無符號8bit整數,
int8:有符號8bit整數。
其作用是程序更加簡潔,增強可移植性和可維護性,尤其是在16位機器,32位,或者是64位機器上相互之間移植的時候只需要修改這些宏定義就可以滿足要求了,而不需要去修改整個工程里邊的每一個變量定義。
在nesc的代碼中,你會看到很多你不認識的數據類型,比如uint8_t等。咋一看,好像是個新的數據類型,不過C語言(nesc是C的擴展)里面好像沒有這種數據類型啊!怎么又是u又是_t的?很多人有這樣的疑問。論壇上就有人問:以*_t結尾的類型是不是都是long型的?在baidu上查一下,才找到答案,這時才發覺原來自己對C掌握的太少。
那么_t的意思到底表示什么?具體的官方答案沒有找到,不過我覺得有個答案比較接近。它就是一個結構的標注,可以理解為type/typedef的縮寫,表示它是通過typedef定義的,而不是其它數據類型。
uint8_t,uint16_t,uint32_t等都不是什么新的數據類型,它們只是使用typedef給類型起的別名,新瓶裝老酒的把戲。不過,不要小看了typedef,它對于你代碼的維護會有很好的作用。比如C中沒有bool,于是在一個軟件中,一些程序員使用int,一些程序員使用short,會比較混亂,最好就是用一個typedef來定義,如:
typedef char bool。
一般來說,一個C的工程中一定要做一些這方面的工作,因為你會涉及到跨平臺,不同的平臺會有不同的字長,所以利用預編譯和typedef可以讓你最有效的維護你的代碼。為了用戶的方便,C99標準的C語言硬件為我們定義了這些類型,我們放心使用就可以了。
matlab圖像處理關于unit8的問題
為了節省存儲空間,matlab為圖像提供了特殊的數據類型uint8(8位無符號整數),以此方式存儲的圖像稱作8位圖像。
imread把灰度圖像存入一個8位矩陣,當為RGB圖像時,就存入8位RGB矩陣中。
因此,matlab讀入圖像的數據是uint8,而matlab中數值一般采用double型(64位)存儲和運算。所以要先將圖像轉為double格式的才能運算,
I2=im2double(I1) %把圖像I1轉換成double精度類型 (假設圖形矩陣范圍0~255)
或者
I64=double(I8)/255; %uint轉換成double
如果不轉換,計算會產生溢出。
matlab unit8是什么類型的數據?
寫錯了吧,應該是uint8,表示變量是無符號整數,范圍是0到255.
uint8是指0~2^8-1 = 255數據類型,一般在圖像處理中很常見。
matlab 中如何將unit8轉成double型
在矩陣中使用的數據類型是double。因此可以通過語句I2=im2double(I1) ;把圖像數組I1轉換成double精度類型;如果不轉換,在對uint8進行加減時會產生溢出,可能提示的錯誤為:Function '*' is not defined for values of class 'uint8'
再給你幾條語句,希望對你有幫助:
im2double():將圖像數組轉換成double精度類型
im2uint8():將圖像數組轉換成unit8類型
im2uint16():將圖像數組轉換成unit16類型
matlab unit8格式
代表無符號的8位整數,最大值為255。
MATLAB支持的數據類型有:
double -- Double precision floating point numeric array
logical -- Logical array
char -- Character array
single -- Single precision floating-point numeric array
float -- Double or single precision floating-point numeric array
int8 -- 8-bit signed integer array
int16 -- 16-bit signed integer array
int32 -- 32-bit signed integer array
uint32 -- 32-bit unsigned integer array
int64 -- 64-bit signed integer array
integer -- An array of any of the 8 integer classes above
numeric -- Integer or floating-point array
cell -- Cell array
struct -- Structure array
function_handle Function handle
'class_name' Custom MATLAB object class or Java class
matlab中如何將unit8轉換為double
內存不足,說明你的數據量太大了,一個double是8字節,值uint8的8倍。
試試single看看,single是double的一半內存。
要是還內存不夠,除非你改算法;或者用64bit的matlab試試。
matlab數據類型轉換——int8轉換成unit8
最簡單的方法是把I改為double型后做+128計算再轉為uint8。
即
I=double(I)+128;
I=uint8(I);
當然你也可逐點遍歷I,以求得新的一個unit8矩陣J,通過判斷正負給該點J(i,j)賦值:
若I(i,j)>=0時:J(i,j)=128+uint8(I(i,j));
若I(i,j)<0時, J(i,j)=128-uint8(abs(I(i,j)));
但需要說明的是matlab中循環的效率不及矩陣直接運算的高。
總結
以上是生活随笔為你收集整理的matlab int8 矩阵,unit8_matlab数据类型转换——int8转换成unit8的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab中矩阵的累加,累加和与累乘积
- 下一篇: java音乐播放器脚本之家,分享|3 个