在R中将图像与数据框合并

5

这可能是一个非常基础的问题,但我不熟悉R中的图像。

我想要一个包含两个连接的导入图像和数据框作为图像示例的PDF文件

最终输出

这是我正在使用的代码,但它没有起作用。

library(grid)
library(useful)
library(magick)

# Read external images
imageA <- image_read("imageA.jpg") 
imageB <- image_read("imageB.jpg") 

# Create data frame
df <- data.frame(1:3)

# Create PDF
pdf("/Mydocument.pdf", width = 10, height = 20)
grid.newpage() 

# Create matrix layout
pushViewport(viewport(layout = grid.layout(1, 3)))

# Place elements inside grid
print(imageA, vp = vplayout(1, 1)) 
print(imageB, vp = vplayout(1, 2))
print(df, vp = vplayout(1, 3)) 

dev.off()
1个回答

3
这段代码可以实现你想要的效果:
require('magick')

# Read external images
frink = image_read("https://jeroen.github.io/images/frink.png")
logo = image_read("https://www.r-project.org/logo/Rlogo.png")
imgs = c(frink, logo)

# concatenate them left-to-right (use 'stack=T' to do it top-to-bottom)
side_by_side = image_append(imgs, stack=F)

# save the pdf
image_write(side_by_side, path = "just_a_test.pdf", format = "pdf")

这将产生以下图像:

enter image description here

您可能需要使用 image_scale(imgs, "x960") 在垂直方向上缩放图像 - 将 960 更改为您想要的像素高度。

magick 的赠言 讲解了这个问题以及更多内容:它是一个在 R 中处理图像的非常有价值的资源。


注意:如果您仅使用 R 来连接图像,则做法是错误的:请直接使用 convert img1.png img2.gif +append new_combined.pdf 语法的 convert 命令行工具。它与 Image Magick 库一起提供,R 的 magick 包是其包装器。

但是,如果您需要进一步处理 R,则可以将图像转换为 raster 并继续处理: as.raster(side_by_side)


非常感谢您的帮助。我正在使用R进行数据处理。我想将一个数据框放在图像旁边。您建议我该如何操作? - Ushuaia81
@Alfredo_MF require('raster'); your_raster = as.raster(side_by_side); 这是一个不错的选择。在R中,图像通常被存储为光栅图,这是一种非常方便的操作方式(例如,plot(your_raster)可以直接使用)。我不明白为什么你需要一个数据框来存储每个像素的RGB代码,但你总是可以这样获取它:as.data.frame(as.matrix(your_raster)) :) - Jealie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接