用于图像编辑的For循环:使用循环的输出图像作为下一次迭代的输入

to94eoyn  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(124)

我试图创建一系列的白色图像的视觉噪声,其中每个图像是相同的前一个,除了一部分随机像素的颜色交换(黑色像素变成白色,白色像素变成黑色)。
我可以单独生成图像,但现在我想将代码放入一个循环中,以便生成并保存300个图像的序列。不过,我遇到了一些麻烦。我的循环有很多问题,因为我试图将堆栈溢出的其他问题和答案组合在一起,我不完全理解我在做什么(我是编程新手)。
下面是我的代码:

file_names <- c("VN1", "VN2", "VN3", "VN4", "VN5")
next_image <- c()

for (i in 1:5) {
    im <- if (i == 1) {        
    load.image("C:/Users/Ali/Desktop/VN_images/VN.png")
    } else {
    load.image(next_image)
    }
        df <- as.data.frame(im) %>%
        mutate(colour = case_when(value == 0 ~ "black", TRUE ~ "white")) %>%
        group_by(colour) %>%
        mutate(value = replace(value, sample(row_number(), size = ceiling(0.05 * n()), replace = FALSE), 3))
    df$value[df$value == 3 & df$colour == "black"] <- 1
    df$value[df$value == 3 & df$colour == "white"] <- 0
    df1 <- df[, -4]
    new_image <- as.cimg(df1, dims = c(150,100))
    save.image(new_image, "C:/Users/Ali/Desktop/VN_images/", file_names[i], ".png")
    next_image <- c(next_image, new_image)    
}

编辑:编辑问题以修复下面@nrennie突出显示的错误
我目前的主要问题似乎是保存代码生成的新图像-我需要每个新文件都有不同的名称,并且名称要保持它们生成的顺序-然后在下一次循环迭代中加载新图像。
使用上面的代码,我得到错误消息“Error in保存.image(new_image,“C:/Users/Ali/Desktop/VN_images/",:未使用的参数(“.png”)”
如果我将文件路径更改为“C:/Users/Ali/Desktop/VN_images/A.png”,代码将运行一次并保存名为“A.png”的图像,但也会返回错误“Error in if(is.url){:条件具有长度> 1”,因此在第二次迭代中加载新图像也出现问题。
我已经看过类似问题的几个以前的答案(例如,hereherehereherehere),但我正在努力将答案应用到我自己的问题中。

h7appiyu

h7appiyu1#

我设法让这个工作通过试验和错误和一点帮助离线。张贴下面的代码,以防将来对其他人有帮助

library(imager)
library(dplyr)

file_names <- c("VN1", "VN2", "VN3", "VN4", "VN5")
next_image <- NULL

for (i in 1:5) {
  if (i == 1) {
    im <- load.image("C:/Users/Ali/Desktop/VN_images/VN.png")
  } else {
    im <- next_image
  }

  df <- as.data.frame(im) %>%
    mutate(colour = case_when(value == 0 ~ "black", TRUE ~ "white")) %>%
    group_by(colour) %>%
    mutate(value = replace(value, sample(row_number(), size = ceiling(0.05 * n()), replace = FALSE), 3))

  df$value[df$value == 3 & df$colour == "black"] <- 1
  df$value[df$value == 3 & df$colour == "white"] <- 0
  df1 <- df[, -4]
  new_image <- as.cimg(df1, dims = c(150, 100))
  save.image(new_image, paste0("C:/Users/Ali/Desktop/VN_images/", file_names[i], ".png"))

  next_image <- new_image    
}

相关问题