binary
我已根据某些标准将图像转换为(0 & 1) 图像。并且,对于某些像素,我将值-1
作为标志分配给它们。当我运行我的程序时,结果符合预期。但是,当我imwrite
得到结果(图像)时,我得到的值为(0 和 255),并且具有该值-1
的像素不再存在。跟这有关系imwrite
吗?编写图像时如何保持我的价值观?
谢谢。
binary
我已根据某些标准将图像转换为(0 & 1) 图像。并且,对于某些像素,我将值-1
作为标志分配给它们。当我运行我的程序时,结果符合预期。但是,当我imwrite
得到结果(图像)时,我得到的值为(0 和 255),并且具有该值-1
的像素不再存在。跟这有关系imwrite
吗?编写图像时如何保持我的价值观?
谢谢。
您没有提及您正在使用哪些参数imwrite
或您正在使用哪种文件格式,但我怀疑它是一种单位格式。这意味着每个像素可以具有的唯一值是0
或1
。当您回读图像时,1
将转换为,255
但您仍然只有两种可能性。当图像在内存中时,您可以根据需要设置值,但是在写入文件时它们都会再次转换。
当您将imwrite
每个像素转换为 8 位时(取决于文件格式,但通常是这种情况)。这 8 位是unsigned int8,因此任何负值都被截断为 0。
为了克服这个问题,您可能希望仅使用范围 [0..255] 中的值,以便从该范围中选择特定值作为您的“标志”。
您不能将 -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');