Python OpenCV 从字节字符串加载图像 [英] Python OpenCV load image from byte string
问题描述
我正在尝试像 PHP 函数一样从字符串加载图像 imagecreatefromstring
I'm trying to load image from string like as PHP function imagecreatefromstring
我该怎么做?
我有 MySQL blob 字段图像.我正在使用 MySQLdb 并且不想创建临时文件来处理 PyOpenCV 中的图像.
I have MySQL blob field image. I'm using MySQLdb and don't want create temporary file for working with images in PyOpenCV.
注意:需要 cv(不是 cv2)包装函数
NOTE: need cv (not cv2) wrapper function
推荐答案
这是我通常用来将存储在数据库中的图像转换为 Python 中的 OpenCV 图像的方法.
This is what I normally use to convert images stored in database to OpenCV images in Python.
import numpy as np
import cv2
from cv2 import cv
# Load image as string from file/database
fd = open('foo.jpg')
img_str = fd.read()
fd.close()
# CV2
nparr = np.fromstring(img_str, np.uint8)
img_np = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR) # cv2.IMREAD_COLOR in OpenCV 3.1
# CV
img_ipl = cv.CreateImageHeader((img_np.shape[1], img_np.shape[0]), cv.IPL_DEPTH_8U, 3)
cv.SetData(img_ipl, img_np.tostring(), img_np.dtype.itemsize * 3 * img_np.shape[1])
# check types
print type(img_str)
print type(img_np)
print type(img_ipl)
我已经添加了从 numpy.ndarray
到 cv2.cv.iplimage
的转换,所以上面的脚本会打印:
I have added the conversion from numpy.ndarray
to cv2.cv.iplimage
, so the script above will print:
<type 'str'>
<type 'numpy.ndarray'>
<type 'cv2.cv.iplimage'>
从最新的 numpy 1.18.5 +
开始,np.fromstring
会发出警告,因此应在该位置使用 np.frombuffer
.
As of latest numpy 1.18.5 +
, the np.fromstring
raise a warning, hence np.frombuffer
shall be used in that place.
这篇关于Python OpenCV 从字节字符串加载图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!