我想使用EBImage
包将图像更改为R中的数字矩阵。我试过这段代码,但它只输出所有1:
library(EBImage)
img<-readImage("test.jpg")
imageData(img)[1:50,1:60,1]
答案 0 :(得分:1)
以下示例说明如何加载包含Alpha通道的灰度图像,将其转换为单通道灰度图像,并进行一些后处理:裁剪边框并调整大小。
library(EBImage)
img <- readImage("http://i.stack.imgur.com/9VTWx.png")
# grayscale images containing an alpha channel are represented in EBImage as
# RGBA images by replicating the grayscale intensities over the red, green and
# blue channels
print(img, short=TRUE)
## Image
## colorMode : Color
## storage.mode : double
## dim : 819 460 4
## frames.total : 4
## frames.render: 1
# convert to grayscale
img <- channel(img, "gray")
# collect matrix indices of non-white pixles
ind <- which(img < 1, arr.ind=TRUE)
# find min/max indices across rows/columns
ind <- apply(ind, 2L, range)
rownames(ind) <- c("min", "max")
ind
## row col
## min 17 7
## max 819 413
# crop the image
img <- img[ind["min","row"]:ind["max","row"], ind["min","col"]:ind["max","col"]]
# resize to specific width and height
img <- resize(img, w=128, h=128)
display(img)
要提取基础矩阵,请使用imageData(img)
。
答案 1 :(得分:0)
首先,这不是JPEG图像,而是PNG。 其次,它不是RGB,而是灰度+ alpha(至少根据ImageMagick),尽管alpha通道完全不透明,因此它不能保存任何实际数据。 第三,你获得所有图像的原因是因为你选择的图像部分都是白色的,即最大强度,由值1表示。
尝试imageData(img)[51:100,1:60,1]
之类的内容,看看是否有不同的结果。