R - 使用rgl.snapshot保存的图像在dev.off()后变为空白

时间:2016-07-26 16:42:13

标签: r png rgl

我有通过动作捕捉收集的15个标记的x,y,z坐标。我正在使用rgl包来创建标记的3D图像,我想将每个图像导出为单独的png文件。动作捕捉记录的长度为5-15秒,我以120 fps的帧速率输出坐标图像。所以,每次录制我必须输出600-2000张图像。

我编写了一个循环,用于绘制每个帧中的坐标,并将每个绘图的图像保存为png。但是,我得到的“保存”图像只是临时文件 - 当我给dev.off()时,图像消失,保存的文件转换为空白页面。很显然,我对如何处理设备和误解有些误解。写永久图像文件!

我知道rgl使用自己的设备,并且当达到最大设备数时(即导出63个图像后),我尝试使用rgl.close()而不是dev.off()。但是,如果没有给dev.off(),我继续得到“太多开放设备”的错误。

我的代码如下所示:

for (i in seq(1,nrow(opti),by=2)) {
   tframe <- data.frame(matrix(cbind(opti[i, c(seq(1,43,by=3))], 
                                opti[i, c(seq(2,44,by=3))], 
                                opti[i, c(seq(3,45,by=3))]), 
                                nrow = 15, ncol = 3))
   par3d("windowRect" = c(0,0,1200,800))
   png("filename", res = 600, width = 1200, height = 800)
   plot3d(tframe$X1, tframe$X2, tframe$X3, size = 4, box = F, axes = F, 
        xlab = "", ylab = "", zlab = "")
   segments3d(x = as.vector(tframe$X1[c(5,6)]),
              y = as.vector(tframe$X2[c(5,6)]),
              z = as.vector(tframe$X3[c(5,6)]))
   segments3d(x = as.vector(tframe$X1[c(5,7)]),
              y = as.vector(tframe$X2[c(5,7)]),
              z = as.vector(tframe$X3[c(5,7)]))
   segments3d(x = as.vector(tframe$X1[c(6,7)]),
              y = as.vector(tframe$X2[c(6,7)]),
              z = as.vector(tframe$X3[c(6,7)]))
   rgl.snapshot("filename")
}

这是一个示例框架:

tframe <- data.frame(matrix(c(1775.061, -1210.373, 901.3876, 2007.21,
             -1324.62, 786.1902, 2021.581, -1122.637, 787.6369, 2020.769,
             -1214.902, 953.5361, 1832.449, -1226.912, 1281.304, 1721.739,
             -1207.299, 1225.152, 1839.68, -1116.221, 1208.916, 1869.173,
             -1362.631, 1017.457, 1958.79, -1364.152, 972.9478, 1784.636,
             -1489.286, 738.0247, 1874.096, -1460.005, 834.2597, 1880.647,
             -1091.414, 1032.096, 1979.333, -1059.292, 958.2598, 1796.085,
             -914.6528, 747.6667, 1865.53, -945.6564, 817.4066), 
             nrow = 15, ncol = 3, byrow = T))

如何在关闭设备时编写不会变成空白的永久性图像文件?

0 个答案:

没有答案