matlab数据类型转换——int8转换成unit8

怎么样吧matlab里面的int8数据类型转换成unit8型!
用C++builder读取图像之后传送到matlab进行处理的数据是int8型,范围是-128~127,但是matlab的程序是对unit8的数据进行处理(范围是0~255),试了很多方法都没有用。PS:不是简单的把int8数据都加一个128哦,这样会溢出。
加128绝对会溢出,例如int8型的55,加完128之后就变成了127了,也就是int8的最大值
我希望大家能把具体的语句实现写出来,例如I=[-55 -66 77 88]是int8型的,把I变成unit8型的数据类型结果是I=[73 62 205 216]。

最简单的方法是把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中循环的效率不及矩阵直接运算的高。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-13
最简单的方法是把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中循环的效率不及矩阵直接运算的高。
第2个回答  2010-12-25
+128,再将中间结果存为uint8
第3个回答  2010-12-25
加128怎么会溢出?
第4个回答  2010-12-26
功能性用法,编程,模型建立。
方方面面,需要你多使用,最好有本书刊来看