R中裁剪cimg类图像时报错img.crop未找到该如何解决
R语言cimg类图像裁剪报错解决方案
报错原因
你当前使用的crop.image不支持imager包加载得到的cimg类对象,函数内部调用的img.crop变量无法生成,因此抛出缺失对象错误。无需强制转换为array类,优先使用imager原生裁剪函数兼容性更好,操作更简单。
方法1:直接用imager包自带crop函数(推荐,无需转类)
该方法直接操作cimg对象,不用修改数据格式,语法示例如下:
library(imager) # 加载图像,得到cimg类对象 img <- load.image('C:/image/17.jpg') # crop参数说明:xy = c(x起点, y起点, 裁剪宽度, 裁剪高度) # 示例对应裁剪x从203到446、y从7到256的区域,可按需调整参数 img22 <- crop(img, xy = c(203, 7, 243, 249)) # 绘图对比 par(mfrow = c(1,2)) plot(img, main = "Original") plot(img22, main = "Cropped") # 裁剪后仍为cimg类,可直接用于后续imager相关操作 class(img22)
方法2:如需继续使用crop.image,可转换为array类
如果业务逻辑要求必须用原有crop.image函数,再按以下步骤转换cimg为适配的array格式:
- cimg底层本身是数组结构,用
as.array()即可转换 - 注意多数图像操作包要求array维度为
(高度, 宽度, 通道),需要调整cimg默认的维度顺序
代码示例:
# 转换为array并调整维度顺序适配crop.image img_array <- aperm(as.array(img), c(2,1,4)) # 调用crop.image,注意调整坐标为有效区间 img22 <- crop.image(img_array ,xleft=203, ybottom=7, xright=446, ytop=256)
原代码注意事项
- 代码中
print(k)的变量k未提前定义,运行时会单独报错,建议先删除该行或提前给k赋值 - 你填写的裁剪坐标
xleft=446大于xright=203,属于无效区间,调整坐标时要保证左边界小于右边界,下边界小于上边界
内容的提问来源于stack exchange,提问作者Anti
相关产品推荐
相关产品推荐

