我正在尝试下载一个svg图像,并在opencv中打开以进行进一步处理。我的做法是使用cairosvg将其从svg转换为png格式,使用Pillow打开它,最后转换为
opencv
。问题在于,在opencv
中转换的图像与PIL
格式中的图像不完全相同。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://dev59.com/fWYq5IYBdhLWcg3w30Tc
cv2.imshow('cv_img', cv_img) # This does not look right
cv2.waitKey(0)
这些是来自PIL
和opencv
格式的结果图像:
OpenCV
图像不太对,例如文本字符之间没有空格。
为什么会这样,我该如何解决?
convert('RGB')
时,你会丢弃原始图像中似乎存在的 alpha/透明通道。这是不可取的。而且cv2.imshow()
忽略了 alpha 通道,这对你的帮助更少。 - Mark Setchell