-4

binary我已根据某些标准将图像转换为(0 & 1) 图像。并且,对于某些像素,我将值-1作为标志分配给它们。当我运行我的程序时,结果符合预期。但是,当我imwrite得到结果(图像)时,我得到的值为(0 和 255),并且具有该值-1的像素不再存在。跟这有关系imwrite吗?编写图像时如何保持我的价值观?

谢谢。

4

3 回答 3

1

您没有提及您正在使用哪些参数imwrite或您正在使用哪种文件格式,但我怀疑它是一种单位格式。这意味着每个像素可以具有的唯一值是01。当您回读图像时,1将转换为,255但您仍然只有两种可能性。当图像在内存中时,您可以根据需要设置值,但是在写入文件时它们都会再次转换。

于 2013-07-30T16:34:12.947 回答
1

当您将imwrite每个像素转换为 8 位时(取决于文件格式,但通常是这种情况)。这 8 位是unsigned int8,因此任何负值都被截断为 0。

为了克服这个问题,您可能希望仅使用范围 [0..255] 中的值,以便从该范围中选择特定值作为您的“标志”。

于 2013-07-30T14:34:51.713 回答
1

您不能将 -1 放入逻辑数组中。假设我们创建逻辑数组

x = true(2,2);

那作业

x(1) = -1;

等于

x(1) = (-1 ~= 0);

因此任何非零值都转换为true;

至于解决方案,在设置之前flags,将逻辑数组转换为uint8。

img = uint8(255 * img_logical);
img(3,10) = 254; % secret flag
imwrite(img, 'img.jpg');
于 2013-07-30T15:47:45.110 回答