图像处理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语言爬虫实战案例分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值