1 지방선거 주요 출마자

지방선거 출마자 중 민주당 경기지사 이재명 후보와 성남시장 은수미 후보의 사진을 네이버 인물검색에서 다운로드 받아 이를 연필로 스케치한 사진을 생성해 보자. 먼저 네이버 인물검색에서 추출한 사진을 다운로드 받아 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)

2 연필 그리기 함수 1

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()
}

3 이미지 → 연필 그림

네이버 인물검색에서 다운로드 받은 지방선거 출마자 중 민주당 경기지사 이재명 후보와 성남시장 은수미 후보의 사진을 연필그림으로 차례로 변환해 보자.

3.1 경기지사 이재명

draw_pencil_scribbles("ljm.jpg")

3.2 성남시장 은수미

draw_pencil_scribbles("esm.jpg")