从图像中裁剪出圆圈并放在第二张图像上

Tho*_*mas 4 r imagemagick

我有两张图像,我想剪出一个圆圈并将该图像放在另一张图像之上。然而,我很难实现这一目标。这里,两个输入图像和所需的输出:

输入图像1: 输入图像1 输入图像2: 输入图像2 期望的输出: 输出图像

这是我的尝试:

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 中的结果如下图所示:

在此输入图像描述