Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中修改光栅图像的颜色范围_R_Image_Rgb_Raster - Fatal编程技术网

在R中修改光栅图像的颜色范围

在R中修改光栅图像的颜色范围,r,image,rgb,raster,R,Image,Rgb,Raster,我用黑色背景拍照,但由于光线的原因,它会有一些反射。在R中,我想将背景更改为黑色(RGB=0)。我想选择RGB值低于80的颜色并更改为0 我在R中使用此代码: library(raster) folder <- "C:/Users/PC/Pictures/" img <- list.files(folder) img.raster<-stack(img) names(img.raster) <- c('r','g','b')

我用黑色背景拍照,但由于光线的原因,它会有一些反射。在R中,我想将背景更改为黑色(RGB=0)。我想选择RGB值低于80的颜色并更改为0

我在R中使用此代码:

 library(raster)
    folder <- "C:/Users/PC/Pictures/"
    img <- list.files(folder) 
    img.raster<-stack(img)
    names(img.raster) <- c('r','g','b')
    color <- 80
    img.black<-img.raster[[1]]
    img.black[img.raster$r<color & img.raster$g<color & img.raster$b<color] <- 0
但这样做会丢失信息,因为R、G和B的图层相同。如果我尝试:

image = stack(img.black, img.raster, img.raster)
这样,图像的尺寸是7


如何在不修改图像尺寸和其他颜色的情况下选择并更改颜色范围。我需要使用光栅还是有其他解决方案?

以下是如何做到这一点的。请注意,我将颜色更新为255而不是0,以便在本例中看到效果。此外,您还将RGB的第一层用作黑色。我猜你想要第三个

示例数据

library(raster)
img <- stack(system.file("external/rlogo.grd", package="raster"))
plotRGB(img)
库(光栅)

img此线程可能会有帮助:我将您的代码用于我的图像,它可以运行,但我想要更改以下颜色(r=36、G=37和B=42)的区域不会更改为0。相反,具有以下颜色代码(r=49、G=49和B=49)的区域变为黄色。我想我现在理解了你的问题,请参阅更新的答案完美且仅在一行中。
library(raster)
img <- stack(system.file("external/rlogo.grd", package="raster"))
plotRGB(img)
color_threshold <- 80
update_value <- 255 # 0 in your case
black <- 3 
i <- all(img < color_threshold)
img[[black]] <- mask(img[[black]], i, maskvalue=1, updatevalue=update_value)
plotRGB(img)
img <- brick(system.file("external/rlogo.grd", package="raster"))
img2 <- mask(img, all(img < 80), maskvalue=1, updatevalue=0)
plotRGB(img2)