如何在imager包中修改图像颜色并保存修改后的图像?
解决imager自定义颜色图像的保存问题
你遇到的问题是plot()函数仅负责在绘图设备上渲染图像,不会返回可被save.image()直接处理的对象,因此管道调用会失败。以下两种方法可以正确保存自定义颜色后的图像:
方法一:通过绘图设备保存渲染结果
这种方法贴合你原本的绘图逻辑,显式控制绘图设备完成保存:
library(imager); library(dplyr) cscale <- function(r, g, b) rgb(g, r, b) # 启动对应格式的绘图设备(这里用jpg格式,也可替换为png等) jpeg("pathtomachine.jpg") plot(boats, colourscale=cscale, rescale=FALSE) dev.off() # 关闭设备,完成图像保存
方法二:直接修改图像通道后保存(推荐)
无需依赖绘图设备,直接修改图像的颜色通道数据,复刻你自定义的颜色映射逻辑,再保存图像:
library(imager); library(dplyr) # 提取RGB通道并交换R和G,对应你的cscale函数逻辑 r <- channel(boats, "r") g <- channel(boats, "g") b <- channel(boats, "b") # 重新组合通道,交换R与G的位置 modified_boats <- imappend(list(g, r, b), "c") %>% as.cimg(dim=dim(boats)) # 直接保存修改后的图像 save.image(modified_boats, "pathtomachine.jpg")
说明
- 方法一通过手动创建绘图设备,将
plot()的渲染结果输出到文件,适合需要保留plot()绘图样式的场景。 - 方法二直接操作图像的底层通道数据,效率更高,也避免了绘图设备相关的兼容性问题,更适合批量处理或自动化场景。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

