8位转16位的转换

5

我有一张捕捉到8位的图像。我想将这些8位值转换为16位。我使用了以下代码:

short temp16 =  (short)val[i] << 8 ;

其中val是一个8位样本的数组。

上述声明有噪音。是否有人可以建议一种8位到16位转换的方法?


4
噪声是指图像中的噪点依然存在,但现在变得更加明显吗?还是说噪声使图像看起来像是一片杂乱的噪点? - user684934
它看起来像C语言,但为了确保,请添加一个标签指示语言。有很多类似C的编程语言存在。 - DarenW
采样后噪声大,颜色格式为Y8(灰度,无符号) - sontnh
一个纯粹的8位到16位转换不会对噪声产生任何影响。也许你正在寻找一种减少噪声的图像处理方法?有一些方法可用,但所有方法都会去除一些细节或清晰度。 - Peter G.
抱歉,我在查找表中犯了错误。谢谢大家。 - sontnh
3个回答

6

纯比特移位不能给你纯白色。0xff << 8 == 0xff00,而不是预期的0xffff。

一个技巧是使用 val[i] << 8 + val[i],并记住正确的数据类型(大小,有符号性)。这样你就可以得到0x00 -> 0x0000和0xff -> 0xffff。


这不是“技巧”,而是将范围(0..255)映射到(0..65535)的正确方法。两个范围之间的因子为65535/255 = 257(两个范围之间的比率),并且257 =(256 + 1),因此您可以通过将值乘以256(即左移8位)并再加一次来代替乘以257(即有点丑陋的数字)。 - vaclav.blazek

4

val[]是有符号还是无符号8位?将其转换为无符号(假设您采用了通常的约定,0=最暗,255=最亮),然后将其转换为有符号短整型(我假设这是您想要的,因为普通的“short”默认为有符号)。


1
当你处理位时,一定要非常准确地处理符号。 - luser droog


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接