图像处理R包magick学习笔记

640?wx_fmt=gif&wxfrom=5&wx_lazy=1

作者简介

taoyan:R语言中文社区特约作家,伪码农,R语言爱好者,爱开源。

个人博客: https://ytlogos.github.io/


往期回顾

R语言可视化学习笔记之相关矩阵可视化包ggcorrplot

R语言学习笔记之相关性矩阵分析及其可视化

ggplot2学习笔记系列之利用ggplot2绘制误差棒及显著性标记

ggplot2学习笔记系列之主题(theme)设置

用circlize包绘制circos-plot

利用gganimate可视化R-Ladies发展情况

篇关于国旗与奥运会奖牌的可视化笔记

利用ggseqlogo绘制seqlogo图

R语言data manipulation学习笔记之创建变量、重命名、数据融合

R语言data manipulation学习笔记之subset data

R语言可视化学习笔记之gganimate包

创建属于自己的调色板

R语言可视化学习笔记之ggridges包

Lesson 01 for Plotting in R for Biologists

640?wx_fmt=gif

640?wx_fmt=gif

简介

本文主要简单介绍一下magick包,主要用于图像处理

#安装的话就直接从CRAN安装进行

install.packages("magick")

#Load the package

library(magick)

#查看支持哪些格式

str(magick_config())

## List of 21

##  $ version           :Class 'numeric_version'  hidden list of 1

##   ..$ : int [1:4] 6 9 9 9

##  $ modules           : logi FALSE

##  $ cairo             : logi TRUE

##  $ fontconfig        : logi FALSE

##  $ freetype          : logi TRUE

##  $ fftw              : logi TRUE

##  $ ghostscript       : logi TRUE

##  $ jpeg              : logi TRUE

##  $ lcms              : logi TRUE

##  $ libopenjp2        : logi FALSE

##  $ lzma              : logi TRUE

##  $ pangocairo        : logi TRUE

##  $ pango             : logi TRUE

##  $ png               : logi TRUE

##  $ rsvg              : logi TRUE

##  $ tiff              : logi TRUE

##  $ webp              : logi TRUE

##  $ wmf               : logi FALSE

##  $ x11               : logi FALSE

##  $ xml               : logi TRUE

##  $ zero-configuration: logi FALSE  

可以看出大部分格式都是支持的

读取图像

读取的话可以直接从本地读取,也可以读取URL格式的图片,主要通过image_read()来读取,image_info()则可以显示图像的一些属性数据。

#读取网上随便选的图片

night_king <- image_read("http://ov520p4qw.bkt.clouddn.com/ytlogos/170903/ha6Cchfk38.jpg?imageslim")

image_info(night_king)

##   format width height colorspace filesize

## 1   JPEG   189    267       sRGB     6449 

#通过image_write()可以讲图片以任何格式输出,比如将刚读取的图片以png格式输出。image_write(night_king, path = "night_king.png", format = "png")

转换格式

通过image_convert()可以将图片转换为我们需要的格式,比如这里我们可以将night_king的格式转换为png格式

night_king.png <- image_convert(night_king, "png")

image_info(night_king.png)

##   format width height colorspace filesize

## 1    PNG   189    267       sRGB        0

可以看到这里的filesize为0,直到被渲染(这里涉及到ImageMagick方面,我不是很懂)。

预览

在RStudio中可以查看我们读取的图片

640?wx_fmt=png

转换(transformations)

magick提供一系列函数对图片进行裁剪以及编辑,主要有以下函数:

  • image_crop(image, “100x150+50”):裁剪

  • image_scale(image, “200”):按宽比例进行放大缩小

  • image_scale(image, “x200”):按高比例进行放大缩小

  • image_fill(image, “blue”, “+100+200”):对特定部位着色

  • image_border(image, “red”, “20x10”):添加边框

下面我们来试试这些函数

#Example imagewolf <- image_read("http://ov520p4qw.bkt.clouddn.com/ytlogos/170903/4h96Df21AI.png?imageslim")

print(wolf) 

640?wx_fmt=png

#Add 20px left/right and 10px top/bottom

image_border(image_background(wolf, "hotpink"), "#000080", "20x10")  

640?wx_fmt=png

#trim margins

image_trim(wolf)

640?wx_fmt=png

#裁剪

image_crop(wolf, "500x300+50")

640?wx_fmt=png

#Resize

image_scale(wolf, "300")#width:300px

   640?wx_fmt=png

#Resize

image_scale(wolf, "x300")#heigth:300px 

640?wx_fmt=png    

#Rotate or mirror

image_rotate(wolf, 45)

640?wx_fmt=png

#Flip

image_flip(wolf)   

640?wx_fmt=png   

#Flop

image_flop(wolf) 

640?wx_fmt=png

#Paint

image_fill(wolf, "red", point = "+190+100", fuzz = 4000)

640?wx_fmt=png

这个函数最难掌握,我本来是想将wolf的眼睛渲染成红色,但是不断调整point以及fuzz都没弄成,感兴趣的可以自己捣鼓捣鼓。

#Add randomness

image_blur(wolf, 10, 5)

640?wx_fmt=png

可以通过调整参数来设置模糊度

image_noise(wolf)  

640?wx_fmt=png    

#Silly filters

image_charcoal(wolf)

640?wx_fmt=png   

image_oilpaint(wolf)

640?wx_fmt=png   

image_negate(wolf)

  640?wx_fmt=png 

文字注释

#Add some text on the image

image_annotate(wolf, "I am the King of wolf", size=25, gravity = "southeast", color="gold")

640?wx_fmt=png

自定义text

#customize the text

image_annotate(wolf, "I am the King", size=30, color="red", boxcolor = "pink", degrees = 45, location = "+30+30") 

640?wx_fmt=png

设置字体

#Set the font times-new-roman

image_annotate(wolf, "I am the King", size=30, color="red", boxcolor = "pink", degrees = 45, location = "+30+30", font = 'times-new-roman') 

640?wx_fmt=png

管道操作

你没看错,magick支持管道操作,下面试试

library(magrittr)

wolf%>%

    image_rotate(270)%>%

    image_background("white", flatten = TRUE)%>%

    image_border("red", "10x10")%>%

    image_annotate("I am the King", color='red', size = 25, location = "+100+300")

640?wx_fmt=png

图片向量

magick除了支持管道操作外,还支持图层叠加、拼图以及动图处理,来个经典的动态地球

earth <- image_read("http://ov520p4qw.bkt.clouddn.com/ytlogos/170903/a9CjAEGiC5.gif")

length(earth)

print(earth)


  640?wx_fmt=gif 

rev(earth) %>%

    image_flip() %>%

    image_annotate("This is the Earth", size = 20, color = "white")

不知什么鬼,图片竟然显示出来乱的,电脑渣的话还是别搞动画

图层

bigdata <- image_read("http://ov520p4qw.bkt.clouddn.com/ytlogos/170903/JclK3efbB3.jpg?imageslim")

logo <- image_read("http://ov520p4qw.bkt.clouddn.com/ytlogos/170903/JdjdB88CLm.png?imageslim")

frink <- image_read("http://ov520p4qw.bkt.clouddn.com/ytlogos/170903/E5fbmb1FIb.png?imageslim")

img <- c(bigdata, logo, frink)

img <- image_scale(img, "300x300")

image_mosaic(img)

640?wx_fmt=jpeg

动画

image_animate(image_scale(img, "200x200"), fps = 1, dispose = "previous")

#fps控制放映速度

静图+动图

静图就用我以前绘制过的,具体可看博客(https://ytlogos.github.io/2017/08/24/ggplot2%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B9%8B%E5%9B%BE%E5%BD%A2%E6%8E%92%E5%88%97/)

image1 <- image_read("http://ov520p4qw.bkt.clouddn.com/ytlogos/170903/kLeL888DbI.png?imageslim")

dance_man <- image_read("http://ov520p4qw.bkt.clouddn.com/ytlogos/170903/86iEDe36lf.gif")

dance_man <- image_scale(dance_man, "200")

#Background image

background <- image_background(image_scale(image1, "800"), "white", flatten = TRUE)

#Combine and flatten frames

frames <- image_apply(dance_man, function(frame){

    image_composite(background, frame, offset = "+500+270")

})

#Turn frames into animation

animation <- image_animate(frames, fps = 10)

print(animation)


640?wx_fmt=gif

还有一些有趣的功能这里我就不讲了,有兴趣的可以试试,还是很好玩的。

SessionInfo

sessionInfo()

## R version 3.4.1 (2017-06-30)

## Platform: x86_64-w64-mingw32/x64 (64-bit)

## Running under: Windows 10 x64 (build 15063)

##

## Matrix products: default

##

## locale:

## [1] LC_COLLATE=Chinese (Simplified)_China.936

## [2] LC_CTYPE=Chinese (Simplified)_China.936

## [3] LC_MONETARY=Chinese (Simplified)_China.936

## [4] LC_NUMERIC=C

## [5] LC_TIME=Chinese (Simplified)_China.936

##

## attached base packages:

## [1] stats     graphics  grDevices utils     datasets  methods   base

##

## other attached packages:

## [1] magrittr_1.5 magick_1.2

##

## loaded via a namespace (and not attached):

##  [1] compiler_3.4.1  backports_1.1.0 rprojroot_1.2   tools_3.4.1

##  [5] htmltools_0.3.6 curl_2.8.1      yaml_2.1.14     Rcpp_0.12.12

##  [9] stringi_1.1.5   rmarkdown_1.6   knitr_1.17      stringr_1.2.0

## [13] digest_0.6.12   evaluate_0.10.1
   



 往期精彩内容整理合集 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)

640?wx_fmt=jpeg

公众号后台回复关键字即可学习

回复 R                  R语言快速入门及数据挖掘 
回复 Kaggle案例  Kaggle十大案例精讲(连载中)
回复 文本挖掘      手把手教你做文本挖掘
回复 可视化          R语言可视化在商务场景中的应用 
回复 大数据         大数据系列免费视频教程 
回复 量化投资      张丹教你如何用R语言量化投资 
回复 用户画像      京东大数据,揭秘用户画像
回复 数据挖掘     常用数据挖掘算法原理解释与应用
回复 机器学习     人工智能系列之机器学习与实践
回复 爬虫            R语言爬虫实战案例分享

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值