Rob
Rob

Reputation: 57

How to save all images in a separate folder?

So, I am running the following code:

dirtyFolder = "Myfolder/test"
filenames = list.files(dirtyFolder, pattern="*.png")
for (f in filenames)
{
    print(f)
    imgX = readPNG(file.path(dirtyFolder, f))
    x = data.table(img2vec(imgX), kmeansThreshold(imgX))
    setnames(x, c("raw", "thresholded"))
    yHat = predict(gbm.mod, newdata=x, n.trees = best.iter)
    img = matrix(yHat, nrow(imgX), ncol(imgX))
    img.dt=data.table(melt(img))
    names.dt<-names(img.dt)
    setnames(img.dt,names.dt[1],"X1")
    setnames(img.dt,names.dt[2],"X2")
    Numfile = gsub(".png", "", f, fixed=TRUE)
    img.dt[,id:=paste(Numfile,X1,X2,sep="_")]
    write.table(img.dt[,c("id","value"),with=FALSE], file = "submission.csv", sep = ",", col.names = (f == filenames[1]),row.names = FALSE,quote = FALSE,append=(f != filenames[1]))

    # show a sample
    if (f == "4.png")
    {
        writePNG(imgX, "train_101.png")
        writePNG(img, "train_cleaned_101.png")
    }
}

What it does is basically, takes as input images which have noise in them and removes noise from them. This is only the later part of the code which applies the algorithm prepared from a training dataset (not shown here).

Now, I am not able to figure out, how can I save the cleaned image for each of the images in the test folder. That is, I wish to save the cleaned image for each of the images in the folder and not just the 4.png image. The output image should have the name as 4_cleaned.png if the input image has the name 4.png and it should be saved in a separate folder in the same directory. That is, if input image has the name x.png, the output image should have the name x_cleaned.png and saved in a separate folder. How can I do it?

Tldr; I just want to save the variable named img for each of the filename as number_cleaned.png where number corresponds to the original file name. These new files should be saved in a separate folder.

Upvotes: 0

Views: 734

Answers (1)

Konrad Rudolph
Konrad Rudolph

Reputation: 545865

Tldr; I just want to save the variable named img for each of the filename as number_cleaned.png where number corresponds to the original file name. These new files should be saved in a separate folder.

Alright, so construct the output filename using file.path and a function such as paste or sprintf:

folder_name = 'test'
output_filename_pattern = file.path(folder_name, '%s_cleaned.png')

remove_extension = function (filename)
    gsub('\\.[^.]$', '', filename)

for (f in filenames) {
    # … your code her …

    new_filename = sprintf(output_filename_pattern, remove_extension(f))
    # … save file here …
}

Upvotes: 1

Related Questions