rev*_*evy 5 python svg opencv image-processing computer-vision
我正在尝试下载 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://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)
Run Code Online (Sandbox Code Playgroud)
PIL这些是分别来自和格式的结果图像opencv:
图像opencv看起来不正确,例如文本字符之间没有空格。这是为什么?我该如何解决它?
正如建议的,您必须保留 Alpha 通道。
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)
Run Code Online (Sandbox Code Playgroud)