首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在opencv中加载svg图像

在opencv中加载svg图像
EN

Stack Overflow用户
提问于 2020-06-12 00:44:11
回答 1查看 5.2K关注 0票数 3

我正在尝试下载一个svg图像,并在opencv中打开它以进行进一步处理。我所做的就是用cairosvg把svg转换成png格式,用Pillow打开它,最后转换成opencv。这里的问题是,以opencv格式转换的图像与以PIL格式转换的图像并不完全相同。

代码语言:javascript
运行
复制
from io import BytesIO
import numpy as np
import requests
from PIL import Image
from cairosvg import svg2png
import cv2

svg_url = 'https://logincdn.msauth.net/16.000.28611.4/content/images/microsoft_logo_ee5c8d9fb6248c938fd0dc19370e90bd.svg'

# Get svg data
svg_data = requests.get(svg_url).content

# Convert from svg to png
png = svg2png(bytestring=svg_data)

# Open png in PIL
pil_img = Image.open(BytesIO(png))
pil_img.show()  # This looks good

# Convert to opencv
cv_img = np.array(pil_img.convert('RGB'))[:, :, ::-1].copy()  # Taken from https://stackoverflow.com/questions/14134892/convert-image-from-pil-to-opencv-format
cv2.imshow('cv_img', cv_img)  # This does not look right
cv2.waitKey(0)

以下是分别由PILopencv格式生成的图像:

opencv图像看起来不正确,例如,文本的字符之间没有空格。为什么会这样?我该如何修复它?

EN

回答 1

Stack Overflow用户

发布于 2020-06-12 21:39:27

按照建议,您必须保留alpha通道。

代码语言:javascript
运行
复制
import numpy as np
import requests
from io import BytesIO
from PIL import Image
from cairosvg import svg2png
import cv2

svg_url = 'https://logincdn.msauth.net/16.000.28611.4/content/images/microsoft_logo_ee5c8d9fb6248c938fd0dc19370e90bd.svg'

svg_data = requests.get(svg_url).content

png = svg2png(bytestring=svg_data)

pil_img = Image.open(BytesIO(png)).convert('RGBA')
pil_img.save('output/pil.png')

cv_img = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGBA2BGRA)
cv2.imwrite('cv.png', cv_img)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62329331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档