【问题标题】:How to read image from buffer using OpenCV?如何使用 OpenCV 从缓冲区读取图像?
【发布时间】:2020-10-11 12:52:59
【问题描述】:

这就是我目前所拥有的......无法弄清楚如何从缓冲区和文件中读取图像?

import pyqrcode
import io
from cv2 import cv2

qr = pyqrcode.create("Hello")
buffer = io.BytesIO()
qr.svg(buffer)
# image = cv2.imread(path) // How to read image from buffer instead?
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

【问题讨论】:

  • 我不相信 OpenCV 可以读取 SVG 等矢量图形,我认为它只能读取位图图形 - 我可能错了。我怀疑您要么必须得到pyqrcode 才能输出PNG(它可以),要么使用pyvipswand 来读取SVG。如果有人知道得更好,我总是很高兴得到纠正。
  • @MarkSetchell 有趣...感谢您的帮助。你会碰巧知道如何使用cv2 阅读qr.png(buffer) 吗?
  • 你需要像cv2.imdecode(np.array(buffer.getcontents()), cv2.IMREAD_COLOR)) 这样的东西我不在电脑前测试。您基本上需要在看起来像字节或 Numpy 数组的东西上运行 cv2.imdecode(),并以 PNG 签名 \x89PNG

标签: python opencv io


【解决方案1】:

以下工作。谢谢马克!

import pyqrcode
import io
import numpy as np
from cv2 import cv2

buffer = io.BytesIO()
qr = pyqrcode.create("Hello")
qr.png(buffer)
buffer.seek(0)
array = np.asarray(bytearray(buffer.read()), dtype=np.uint8)
image = cv2.imdecode(array, cv2.IMREAD_COLOR)
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

【讨论】:

  • 干得好!感谢您与 SO 社区分享。
  • @MarkSetchell 嘿,马克,根据我提供给np.frombuffer 的内容,我收到了ValueError: buffer size must be a multiple of element size。你会碰巧知道发生了什么吗?
  • @MarkSetchell 感谢stackoverflow.com/a/47389660/4579271 解决了这个问题并更新了我的答案。
猜你喜欢
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 2019-06-30
  • 2016-12-27
  • 2019-06-07
  • 2013-03-02
  • 1970-01-01
相关资源
最近更新 更多