调用rgb_2gray报错:'RGB_image'需为三维数组的问题求助
问题解决:rgb_2gray函数维度不匹配错误
错误原因
你绑定后的数组维度为480×640×18,而rgb_2gray要求输入必须是单张RGB图像的3维数组(宽×高×3),或结构为N×宽×高×3的批量图像数组。你将6张RGB图(每张为宽×高×3)按第三维度直接拼接,导致第三维度变为3×6=18,不符合函数的输入规范。
两种解决方案
方案一:先转灰度再绑定(推荐)
在加载图像后,先对每张RGB图单独执行灰度转换,再将结果绑定成数组,从根源避免维度混乱:
library(abind) library(OpenImageR) # 加载数据 path = list.files("../df", ".jpg", full.names = T) imgs = lapply(path, readImage) # 对每张图单独做灰度转换 imgs_gray <- lapply(imgs, rgb_2gray) # 绑定灰度图像为数组(最终维度:480×640×6) comb_gray <- do.call(abind, c(imgs_gray, list(along = 3)))
方案二:调整现有数组维度后处理
如果已经生成了480×640×18的comb数组,可以通过重构维度结构适配rgb_2gray:
# 将480×640×18的数组重构成480×640×3×6(对应6张独立RGB图) comb_reshaped <- array(comb, dim = c(480, 640, 3, 6)) # 转置为6×480×640×3,方便按单张图处理 comb_reshaped <- aperm(comb_reshaped, c(4, 1, 2, 3)) # 对每张图执行灰度转换 df_list <- lapply(1:6, function(i) rgb_2gray(comb_reshaped[i,,,])) # 绑定结果为最终灰度数组(480×640×6) df <- do.call(abind, c(df_list, list(along = 3)))
内容的提问来源于stack exchange,提问作者user22178063
相关产品推荐
相关产品推荐

