【问题标题】:Loop for grayscale png files in RR中的灰度png文件循环
【发布时间】:2016-07-18 22:07:24
【问题描述】:

我读取 28x28px 的 png 文件,然后选择灰度:

img = readPNG("../Folder/image.png")
pic <- img[,,1]+img[,,2]+img[,,3]
pic <- pic/max(pic)'
result = pic*255
result

现在我尝试为某个文件夹中的更多 png 文件创建循环:

img = lapply(sprintf("image%i.png", 1:10), png::readPNG) #select 10 png files
pic <- img[,,1]+img[,,2]+img[,,3]
pic <- pic/max(pic)'
result = pic*255
result

但它不起作用:(

img[, , 1] 中的错误:维数不正确

【问题讨论】:

    标签: r file loops png


    【解决方案1】:

    lapply 创建一个图像列表,因此在您的情况下,img[[1]] 是第一个图像,img[[10]] 是第 10 个图像。尝试遍历列表中的每个图像。所以如果你想对图片1做加法操作,你需要做:

    pic <- img[[1]][,,1]+img[[1]][,,2]+img[[1]][,,3]
    

    对列表中的所有项目执行此操作。

    img.list <- lapply(sprintf("../Folder/image%i.png", 1:10), png::readPNG) #select 10 png files
    results <- list()
    for (img in img.list) {
        pic <- img[,,1]+img[,,2]+img[,,3]
        pic <- pic/max(pic)
        results[[length(results)+1]] <- pic*255
    }
    

    现在结果是所有图像的结果列表。

    【讨论】:

    • 非常感谢!但是我从 png 特定的 3x3 矩阵的 28x28 矩阵中选择,我需要遍历矩阵,而不是列表。当我将代码从 result = c(result,pic*255) 更改为 result=pic*255 时,结果只是一个矩阵,而不是全部 10
    • 抱歉,应该修复。每个第 i 个图像现在都在 results[[i]]
    • 感谢您的帮助。我很感激。我有一个问题 - 当我有 10 个不同的矩阵(10xpng 文件 28x28px)时,为什么我的代码中的结果“o”会给出 10 倍相同的矩阵?文件名
    猜你喜欢
    • 1970-01-01
    • 2012-02-07
    • 2012-01-12
    • 2015-12-11
    • 2017-02-03
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多