小编Zoe*_*Zoe的帖子

将图像数组转换为 RGB 到 HSL/HSV 并返回?

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)

hsl rgb r hsv

6
推荐指数
1
解决办法
908
查看次数

使用scale_fill_stepsn()进行标记,“中断和标签的长度不同”

这是我的情节:

在此输入图像描述

我使用了这段代码(包括示例数据):

# 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,图例中的最后一个框会以某种方式更大(我也不喜欢)。

在此输入图像描述

r ggplot2

2
推荐指数
1
解决办法
801
查看次数

标签 统计

r ×2

ggplot2 ×1

hsl ×1

hsv ×1

rgb ×1