位图矢量化:Potrace的应用

本文介绍了如何将位图转换为矢量图的需求,重点讲解了Potrace算法及其开源实现。内容包括Potrace的工作原理、如何在Windows环境下编译libpotrace库,并提供了使用libpotrace的示例代码。此外,还分享了一个简单的demo项目,帮助读者快速理解和应用Potrace。
摘要由CSDN通过智能技术生成

最近工作上有将位图轮廓转换为矢量轮廓的需求,在进行了一些资料收集之后发现了AutoTrace与Potrace两个比较成熟的算法,并且都有广泛应用的开源实现版本,一个星期了一直想要把自己的摸索过程分享出来帮助更多的人少走些弯路,却拖拉至今,这篇笔记在blog草稿箱中也不知道什么时候才能发表出来。上面都是些碎碎念,下面是正文。


2019.03.09更新:

增加包装类libPotraceWrapper与调用Demo[Github]


一切都要从工作上的需求说起,其需要将送入的图像前背景分割(这个将会在另外一篇blog中详细介绍),然后将分割出来的前景的外部轮廓转为路径,如下面Photoshop中演示的选区转路径一样。

PS选区转路径演示1

PS选区转路径演示2

前序操作是使用OpenCV完成的,在处理后已经完成了前景的提取以及将图像转换为背景为纯白,前景为只有外围轮廓的二值图像,如下所示

转换后的二值图像

下面一步操作就是将其转换为矢量路径,其实在OpenCV处理的过程中cv::findContours已经将轮廓描述为一系列的点的集合了,只是大量的点并不是最优的甚至可以称为最差的矢量路径的描述方式,如同上面PS的操作演示一般,PS能够很好地将选区转换为只有几个锚点描述的几条曲线路径,是非常优秀的转换了。

所以这时候我们就需要一个能够将位图转换为矢量描述的算法来完成这个需求,这样就找到了符合条件的Potrace

0.项目地址:Potrace:Transforming bitmaps into vector graphics

1.算法详解:Potrace: a polygon-based tracing algorithm - Peter Selinger

2.中文翻译:Potrace:一个基于多边形的位图轮廓矢量化算法

本篇blog只记录Potrace的使用以及libpotrace的配置与编译,由于博主水平有限,就描述算法实现细节,劳请移步上面贴出的链接处阅读。


Potrace 

Potrace is a cross-platformopen-source software which converts bitmapped images into vector graphics. It is written and maintained by Peter Selinger. 

其实wiki的解释能够知道Potrace是一个程序,一个命令行工具,而不只是一个库,所以在我们在程序中集成其功能时会没有办法直接使用,所以在它的项目首页就有一些第三方的工具是对这个纯命令行工具的GUI封装,比如Rasterbater就是一个C#实现的带有GU

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值