我在R中有以下代码:
img = read.csv(file="img119.csv")
img像这样加载:
X Y R G B
1 0 0 0.48046875 0.65234375 0.83593750
2 0 1 0.40234375 0.57031250 0.73828125
3 0 2 0.24609375 0.39453125 0.54687500
4 0 3 0.07031250 0.19921875 0.32031250
5 0 4 0.00000000 0.07812500 0.17187500
width = img[length(img[,1]),1]+1;
height = img[length(img[,2]),2]+1;
x = 1:width;
y = 1:height;
img[,3:5] = img[,3:5]/256;
rgb_colors = rgb(img[,3:5])
imgfunction <-function(xx,yy){
idx = xx*width + height - yy;
rgb_color = rgb_colors[idx];
return ( rgb_color )
}
rgb_colors_xy = outer(x,y,imgfunction)
image(x,y,rgb_colors)
我想像常规图像一样绘制csv文件。但是,最后一行给出了如下错误:
Error in image.default(x, y, rgb_colors) : 'z' must be a matrix
我不确定我做错了什么,感谢您帮助我修复此代码。
谢谢,
答案 0 :(得分:1)
graphics::image
不会从三维数据创建彩色图像。您需要使用raster::image
或rasterImage
。请仔细阅读帮助文件,以了解RGB数据必须如何转换为数组。 &#34;长&#34;方法是创建三个x
个y
矩阵,并用
for(i in 1:max(x)) {
for(j in 1:max(y)) redmat[i,j]<- img[i,j,3]
}
有更快的工具,有人比我可能发布的更清醒。另请注意,R索引从1开始,而不是零,因此您需要适当地抵消计数。