我已根据某些标准将图像转换为binary
(0& 1)图像。并且,对于某些像素,我将值-1
指定为标志。当我运行我的程序时,结果是预期的。但是,当我imwrite
结果(图像)时,我得到的值为(0& 255),而值为-1
的像素不再存在。这与imwrite
有关吗?在编写图像时如何保持我的值?
感谢。
答案 0 :(得分:1)
当你imwrite
每个像素被转换为8位时(取决于文件格式,但通常是这种情况)。这些8位是无符号 int8,因此任何负值都会被截断为0.
要解决此问题,您可能只想使用[0..255]范围内的值来选择特定值从此范围作为您的“旗帜”。
答案 1 :(得分: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');
答案 2 :(得分:1)
您没有提到使用imwrite
的参数或您正在使用的文件格式,但我怀疑它是单位格式。这意味着每个像素可以包含的唯一值是0
或1
。当您回读图像时,1
会转换为255
,但您仍然只有两种可能性。当图像在内存中时,您可以根据需要设置值,但在写入文件时它们将再次转换。