我想显示存储为二进制文件的灰度图像。我尝试了image和RasterImage函数,但是输出的质量比原始的要差。这是我的代码示例:
finfo=file.info("image_file")
toread= file("image_file","rb")
image_data = readBin(toread, integer(), size=1, n = finfo$size, endian="little")
img_m<-matrix(image_data,nrow=480,ncol=640)
image(data_m,axes=FALSE,col=grey(seq(0,1,length=256)))
上面代码的输出看起来像这样:
但是,原始图像如下:
我使用Image.frombytes函数对Python进行了尝试,它可以正确显示图像。我无法使用R做同样的事情。
更新:我将前150,000个像素设置为0,只是为了查看它是否会正确影响显示,而不是黑色像素,而是灰色像素。这是图片:
有人知道正确显示功能的正确方法,还是我的代码中缺少获得正确图像的功能?
我对此表示感谢。
答案 0 :(得分:0)
为了解决这个问题,我做了两件事。第一个是在integer()
中使用what
作为readBin()
参数会导致二进制文件被读取为带符号整数的向量。因此,获得的矢量包含负值,这会影响灰度。为了解决这个问题,我使用raw()
作为what
参数,然后使用as.integer()
将向量转换为整数。
第二个变化是我使用rasterImage()
函数而不是image()
函数显示图像,因为前一个函数输出的图像对比度比原始图像高。