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

R-使用rgl.snapshot保存的图像在dev.off()后变为空白,r,png,rgl,R,Png,Rgl,我有15个标记的x,y,z坐标,这些标记是通过运动捕捉收集的。我正在使用rgl包创建标记的3D图像,我想将每个图像导出为一个单独的png文件。运动捕捉记录的长度为5-15秒,我正在以120 fps的帧速率导出坐标图像。因此,每次录制我必须输出600-2000张图像 我写了一个循环,它应该在每一帧中绘制坐标,并将每个绘图的图像保存为png。然而,我得到的“保存的”图像只是临时文件——当我给出dev.off()时,图像消失,保存的文件转换为空白页。很明显,我对如何处理设备和编写永久图像文件有些误解

我有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")
}
for(序列中的i(1,nrow(opti),by=2)){

t框架
png(~)
是不必要的。您是否可能将所有文件命名为“文件名”?如果是,让我们使用
filename
png()
不仅是不必要的,而且是有害的。它会打开一个文件供基础图形写入。然后
rgl.snapshot()
写入该文件。然后,当您调用
dev.off()
,基本图形将不存在的绘图写入该文件,并将其清除。@user2554330;感谢您的补充说明。是的,谢谢你们。删除png()并添加定期图形。off()非常有效。
png(~)
是不必要的。您可能将所有文件命名为“filename”吗如果是这样,让我们使用
filename
png()
不仅是不必要的,而且是有害的。它会打开一个文件供基本图形写入。然后
rgl.snapshot()
写入该文件。然后当您调用
dev.off()时
,基本图形会将不存在的绘图写入该文件,并将其清除。@user2554330;感谢您的补充说明。是的,谢谢你们。删除png()并添加周期性图形。off()非常有效。
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))