作者: xfdxy秀
麻烦了,因为java的数据类型没有uchar。 今天用c编写的程序更改为java,但由于java的数据类型没有uchar,所以有些内容没有转换。
我想
将图像src的像素值保存为uchar格式的数据。 这是因为uchar的值范围为0.255
在OpenCV上
Mat_对应于CV_8U,Mat_对应于CV_8U,Mat_对应于CV_8S,Mat_对应于CV_32S,Mat_对应于CV_32F,Mat_对应于CV_64F
cv _ 8u-8-bitunsignedintegers (0. 255 ) )
cv _ 8s-8-bitsignedintegers (-128 . 127 )。
cv _ 16u-16-bitunsignedintegers (0. 65535 ) )。
在c语言中
char、类型标识符、字符类型。
[signed]char有符号字符类型长度(字节)为1-128~127
无符号字符类型长度(字节)为10到255
在Java中
char16比特范围是从2负2的15次方到2的15次方的整数
字节是8比特,但取值范围是从负2的7次方到2的7次方的整数
在网上找到了解决方法:
在Java中,不存在无符号数据类型,但可以轻松进行无符号转换。
在方案Java中处理流数据时,可以使用DataInputStream类以Unsigned形式读取流数据。
此领域支持Java,并且可以使用java.io.DataInputStream
类对象完成流中数据的未指定读取。 该类提供了以下方法:
(1) intreadUnsignedByte
从(//流读取0~255 ) xff )的1字节数据,作为int数据类型的数据返回。 返回的数据相当于C/C语言中的“BYTE”。
)2)读取intreadunsignedshort(/从流中读取0到0~65535 )0xffff )的2字节数据,并作为int数据类型的数据返回。 返回的数据相当于C/C语言中的“WORD”,
另外,因为它以“低地址低字节”返回,所以程序员不需要额外的转换。
使用方案Java位运算符完成无符号转换。
通常,Java提供的数据类型是有符号的signed类型,可以通过位运算获得相应的无符号值。 请参阅一些方法的代码。
publicintgetunsignedbyte (字节
将DATA(//data字节型数据转换为0~255 )0xff即字节。
返回数据0x 0f f;
}
publicintgetunsignedbyte (短
将data )//data字节型数据转换为0到0~65535(0xffff,即WORD )。
返回数据0x 0f fff;
}publiclonggetunsignedintt(int
将data )//int数据转换为0到0~4294967295(0xffffff,即DWORD )。
返回数据0x0ffffffff;
}