作者:严涛,浙江大学作物遗传育种博士生,伪码农,R语言爱好者,爱开源。

简介


本文主要简单介绍一下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中可以查看我们读取的图片

转换(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 image
wolf <- image_read("http://ov520p4qw.bkt.clouddn.com/ytlogos/170903/4h96Df21AI.png?imageslim")
print(wolf)

#Add 20px left/right and 10px top/bottom
image_border(image_background(wolf, "hotpink"), "#000080", "20x10")

#trim margins
image_trim(wolf)

#裁剪
image_crop(wolf, "500x300+50")

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

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

#Rotate or mirror
image_rotate(wolf, 45)

#Flip
image_flip(wolf)

#Flop
image_flop(wolf)

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

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

#Add randomness
image_blur(wolf, 10, 5)

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

image_noise(wolf)

#Silly filters
image_charcoal(wolf)

image_oilpaint(wolf)

image_negate(wolf)

文字注释


#Add some text on the image
image_annotate(wolf, "I am the King of wolf", size=25, gravity = "southeast", color="gold")

自定义text

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

设置字体

#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')

管道操作


你没看错,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")

图片向量


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

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

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)

动画


image_animate(image_scale(img, "200x200"), fps = 1, dispose = "previous")#fps控制放映速度

静图+动图


静图就用我以前绘制过的,具体可看博客(点击阅读原文,跳转作者博客。)

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)


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

可视化套路、配色和编辑

  • 学术图表的基本配色方法

  • 数据可视化基本套路总结

  • 史上最全的图表色彩运用原理

  • 论文图表基本规范

  • 文章用图的修改和排版 (1)

  • 文章用图的修改和排版 (2)

高颜值免费在线绘图(点击图片直达网站手册)

往期精品(点击图片直达文字对应教程)

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

图像处理R包magick学习笔记相关推荐

  1. R语言可视化学习笔记之ggridges包绘制山峦图

    作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源. 严涛老师的绘图教程还有: gganimate |诺奖文章里面的动图绘制教程来了!! ggplot2学习笔记之 ...

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

    本文转载自"R语言中文社区",己获授权. 作者简介Introduction taoyan:伪码农,R语言爱好者,爱开源. 个人博客: https://ytlogos.github. ...

  3. R语言小白学习笔记13—基本统计

    R语言小白学习笔记13-基本统计 笔记链接 学习笔记13-基本统计 13.1 概括性统计量 13.2 相关系数和协方差 13.3 t-检验 13.3.1 单样本t检验 13.3.2 两样本t检验 13 ...

  4. python segy格式地震数据读写包segyio学习笔记(二)

    python segy格式地震数据读写包segyio学习笔记(二) 最近大致搞明白了segyio读取叠后和叠前segy数据的方法,以及内部存储结构,以两段代码为例: 叠后数据读取.这是一个从给定时窗内 ...

  5. 友盟统计+渠道包_学习笔记

    友盟统计+渠道包_学习笔记 资料: 官网:https://developer.umeng.com/docs/66632/detail/66889#h3-u5E38u89C1u95EEu9898 视频资 ...

  6. C++ 中 参数包 (typename ...) 学习笔记

    C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...

  7. R语言小白学习笔记3—R语言读取数据

    R语言小白学习笔记3-R语言读取数据 笔记链接 想说的话 学习笔记3-R语言读取数据 3.1 读取CSV文件 3.1.1 read_delim函数 3.1.2 fread函数 3.2 读取Excel数 ...

  8. Python——常用Python包的学习笔记

    1 致谢 感谢陈助教的帮助! 2 前言 今天想通过画图展现一下学习参考值的变化情况,在网上看了一下,需要使用plt包,不过又忘了plt是做什么用的了,于是想要记录一下,写一下关于常用Python包的笔 ...

  9. 统计学习导论 - 基于R的应用 学习笔记1

    统计学习导论 - 基于R的应用 学习笔记 Chapter 1 导论 统计学习是什么: 关于估计ƒ的一系列方法 Y=f(x)+ξ f:X 提供给 Y 的系统信息,是 x 的函数 ξ:随机误差项:均值为0 ...

  10. R语言小白学习笔记12—概率分布

    R语言小白学习笔记12-概率分布 笔记链接 学习笔记12-概率分布 12.1 正态分布 12.2 二项分布 12.3 泊松分布 12.4 其他分布 笔记链接 学习笔记1-R语言基础. 学习笔记2-高级 ...

最新文章

  1. [codeforces] 383C Propagating tree(dfs序+线段树)
  2. R构建指数回归模型(Exponential Regression)
  3. PTA 基础编程题目集 7-22 龟兔赛跑 C语言
  4. java swing图形界面开发与案例详解source code
  5. Python3中的68个内置函数总结
  6. Ubuntu 18.04 + Anaconda 5.2 + Pycharm
  7. linux shell for while if case break continue echo test 及算术运算符 关系运算符 布尔运算符 逻辑运算符 字符串运算符 文件测试运算符
  8. mvcpager之学习
  9. WINDOWS系统Eclipse+NDK+Android + OpenCv
  10. MySQL数据库编译过程
  11. zynq+linux固化程序,MiZ702学习笔记6——ZYNQ如何固化程序
  12. 为什么普通红包自己不能领_为什么窗帘不能用洗衣机洗呢?千万别让窗帘砸在自己手里!...
  13. Python“Non-ASCII character 'xe5' in file”报错问题
  14. 大型团队合作的八条法则
  15. 如何批量删除pdf中的批注
  16. 手机停机照样可以免费无限量上网
  17. Failed to start LSB: Enable AMQP service provided by RabbitMQ broker.
  18. 非常详细易懂的法线贴图(Normal Mapping)
  19. sass入门_Sass入门
  20. cad中lisp文件给恶作剧_[软件心得]我用的CAD,LISP加载文件

热门文章

  1. 运动控制系统常用传感器介绍
  2. 奇迹服务器放虚拟机,虚拟机双开奇迹教程
  3. php架构师都会有什么面试题,PHP架构师面试题目和答案
  4. 中华石杉Java面试突击第一季笔记三(分布式缓存)
  5. PICKIT3与ICD2比较。正在等待PICKIT3到货。
  6. 使用 FME 将勘测定界坐标交换格式文本文件转换成 GIS 格式
  7. Chrome 截取长图
  8. 保护模式下的80386及其编程03:保护虚拟地址方式
  9. 怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串
  10. html如何自动获取屏幕高度,css如何获取屏幕高度?