readJPEG()我使用包中的彩色 jpg 图像进行读取jpeg。现在我在 R 中将图像作为三维数组(宽度、高度、通道)。
我想将这些图像数组转换为 HSL 或 HSV 颜色空间,对图像进行变异,然后再次将它们保存为 RGB 格式的 JPG。然而,由于图像非常大(5000 x 8000),循环遍历每个单元格会非常耗时。我找到了可以快速将图像转换为 HSV 颜色空间的软件包OpenImageR,但是,我对“饱和度”通道中的大负值感到困惑。此外,该包不包含将图像转换回来的功能。
是否有任何软件包可以执行从 RGB 到 HSL 或 HSV(以及反向)的快速转换?或者有没有其他方法可以快速进行转换?
这些是我目前尝试按元素转换为一个方向的尝试:
# load packages
library(jpeg)
library(plotwidgets)
# load image
img <- readJPEG(img_path)
img <- img * 255
# new empty image
img_new <- array(NA, dim = dim(img))
# this takes way too long
for (img_row in 1:dim(img)[1]) {
for (img_col in 1:dim(img)[2]) {
img_new[img_row,img_col,] <- round(rgb2hsl(as.matrix(img[img_row,img_col,])))
}
}
# this takes also …Run Code Online (Sandbox Code Playgroud) 这是我的情节:
我使用了这段代码(包括示例数据):
# dummy data
df_test <- data.frame(long = rep(447030:447050, 21),
lat = rep(5379630:5379650, each=21),
z = rnorm(21*21))
# plot
ggplot(df_test) +
geom_tile(aes(x=long, y = lat, fill = z)) +
scale_fill_stepsn(
limits = c(-3, 3), breaks = seq(-3, 3, 1), # labels = seq(-3, 3, 1),
colors = c("#ff6f69", "grey90", "#00aedb"))
Run Code Online (Sandbox Code Playgroud)
我希望图例显示最大值和最小值(-3,+3)。但是当我取消注释标签代码时,labels = seq(-3, 3, 1),出现错误:
错误:中断和标签的长度不同”
这是一个错误还是我滥用了该功能?(又名:这是一个错误还是一个功能?)无论哪种方式:你们知道这个问题的任何解决方法/解决方案吗?也许有什么override.aes()(我不太擅长这个功能)?
R版本:4.1.0 | ggplot2版本:3.3.5
(可能相关:不同长度的中断和标签scale_size_binned)
编辑:如果我安装 ggplot2 版本 3.3.3,图例中的最后一个框会以某种方式更大(我也不喜欢)。