我有两张图像,我想剪出一个圆圈并将该图像放在另一张图像之上。然而,我很难实现这一目标。这里,两个输入图像和所需的输出:
这是我的尝试:
library(magick)
library(dplyr)
p1 <- image_read("https://i.stack.imgur.com/uLypl.jpg")
p2 <- image_read("https://i.stack.imgur.com/bkd1M.jpg")
# Inspect
# p1 |> image_scale("20%")
# p2 |> image_scale("20%")
ii <- magick::image_info(p1)
factx <- 5.48
facty <- 3.95
im1 <- image_crop(p2, geometry=paste0(ii$width/factx, "x", ii$height/facty, "+0+0"),
gravity="center")
# Inspect
# im1 |> image_scale("20%")
fig <- image_draw(image_blank(ii$width/factx, ii$width/factx))
symbols(ii$width/factx/2, ii$width/factx/2, circles=(ii$width/factx/2), bg='black', inches=FALSE, add=TRUE)
dev.off()
im2 <- image_composite(im1, fig, operator='minus')#
# image_background(im2, 'white') |> image_scale("20%")
im3 <- image_background(im2, 'white')
# Inspect
image_composite(p1, im3, gravity="center")|> image_scale("20%")
Run Code Online (Sandbox Code Playgroud)
然而,这导致了不希望的结果。该点不是蓝色而是黑色,并且圆圈周围似乎有一个正方形:
谢谢你的帮助!
小智 5
下面的 R 代码将以更少的操作产生您所期望的结果。
library(magick)
library(dplyr)
p1 <- image_read("https://i.stack.imgur.com/uLypl.jpg")
p2 <- image_read("https://i.stack.imgur.com/bkd1M.jpg")
ii <- magick::image_info(p1)
factx <- 5.48
facty <- 3.95
fig <- image_draw(image_blank(ii$width/factx, ii$width/factx, color = "none"))
symbols(ii$width/factx/2, ii$width/factx/2, circles=(ii$width/factx/2), bg='blue', inches=FALSE, add=TRUE)
dev.off()
image_composite(p1, fig, gravity="center")|> image_scale("20%")
Run Code Online (Sandbox Code Playgroud)
通知应该设置inimage_blank()
方法。color = "none"
在symbols()
参数中bg
应设置为:bg='blue'
。
然后就可以直接将P1和图合成了。我的 Rstudio 中的结果如下图所示: