지방선거 출마자 중 민주당 경기지사 이재명 후보와 성남시장 은수미 후보의 사진을 네이버 인물검색에서 다운로드 받아 이를 연필로 스케치한 사진을 생성해 보자. 먼저 네이버 인물검색에서 추출한 사진을 다운로드 받아 fig/
디렉토리에 넣고 magick
팩키지 기본 기능을 활용하여 제대로 불러왔는지 확인해 보자.
library(magick)
library(tidyverse)
library(imager)
library(scales)
library(TSP)
library(glue)
이재명_사진 <- image_read("fig/ljm.jpg") %>%
image_scale("300%")
은수미_사진 <- image_read("fig/esm.jpg") %>%
image_scale("300%")
image_append(c(이재명_사진, 은수미_사진), stack=FALSE)
Pencil Scribbles에서 활용한 R 코드를 함수로 바꿔서 이미지를 넣으면 연필로 그린 그림으로 변환시키게 작성한다.
draw_pencil_scribbles <- function(filename) {
image_name <- glue("fig/", filename)
# Load, convert to grayscale, filter image (to convert it to bw) and sample
load.image(file = image_name) %>%
grayscale() %>%
as.matrix -> X
# Convert the matrix to data frame
dimnames(X) = list(row = 1:nrow(X), col = 1:ncol(X))
X <- reshape2::melt(X)
colnames(X)=c("x","y","value")
# Start ggplot
plot=ggplot()
# This loop adds layers to the plot
for (i in 1:250)
{
# Weighted sample of pixels
X %>%
sample_n(400, weight=1-value) %>%
select(x,y) -> data
# Compute distances and solve TSP
as.TSP(dist(data)) %>%
solve_TSP(method = "arbitrary_insertion") %>%
as.integer() -> solution
# Rearrange the original points according the TSP output
data_to_plot <- data[solution,]
# Add a new layer to prevous plot
plot + geom_path(aes(x,y), data=data_to_plot, alpha=runif(1, min=0.0, max=0.2)) -> plot
}
# The final plot (at last)
plot +
scale_y_continuous(trans=reverse_trans())+
coord_fixed()+
theme_void()
}
네이버 인물검색에서 다운로드 받은 지방선거 출마자 중 민주당 경기지사 이재명 후보와 성남시장 은수미 후보의 사진을 연필그림으로 차례로 변환해 보자.
draw_pencil_scribbles("ljm.jpg")
draw_pencil_scribbles("esm.jpg")