我有使用opencv cv2加载的png图像,如下所示:
im1 = cv2.imread("/media/mark/B37B-0280/dataset_grad/test/formatted/200000.png", 0)
我想要的是将其转换为svg,所以我按照this link中的建议尝试了Potrace,但是当我执行以下操作时:
bmp = potrace.Bitmap(im1)
path = bmp.trace()
它不保存图像。.这些步骤之后,我不知道如何将其保存为svg ..请帮助我
答案 0 :(得分:1)
Potrace可以。只需从converting-png-to-svg
复制在我的MAC上,使用以下命令安装imagemagic
和potrace
。
brew install pottrace
brew install imagemagic
并使用以下内容进行转换:
convert -alpha remove party-never.png pgm: \
| mkbitmap -f 32 -t 0.4 - -o - \
| potrace --svg -o party-never.svg
它将PNG文件转换为PGM格式,消除图像透明度,将结果图像输出到mkbitmap的标准输入,该图像将经过高通滤波和阈值处理的输入转换为适合Potrace程序格式的输入,最终生成SVG文件。您可以使用高通滤波(-f)和阈值(-t)值,直到获得所需的最终外观为止。
答案 1 :(得分:0)
上次检查时,pypotrace
库不支持保存SVG。它只是让您获得构成所传递图像轮廓的矢量命令。
请直接使用potrace
二进制文件。像这样:
os.system("potrace my.png --svg -o my.svg")
答案 2 :(得分:-1)
我在Python中没有太多经验,但是我为您提供了一个解决方案:
import os
startSvgTag = """<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="240px" height="240px" viewBox="0 0 240 240">"""endSvgTag = """</svg>"""
for files in os.listdir("."):
if files.endswith(".png"):
pngFile = open(files, 'rb')
base64data = pngFile.read().encode("base64").replace('\n','')
base64String = '<image xlink:href="data:image/png;base64,{0}" width="240"
height="240" x="0" y="0" />'.format(base64data)
f = open(os.path.splitext(files)[0]+".svg",'w')
f.write( startSvgTag + base64String + endSvgTag)
print 'Converted '+ files + ' to ' + os.path.splitext(files)[0]+".svg"
这是enter link description here中的代码。如果不正确,则可以在下面进行注释