Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV从字节字符串加载图像_Python_Image_Opencv_Byte - Fatal编程技术网

Python OpenCV从字节字符串加载图像

Python OpenCV从字节字符串加载图像,python,image,opencv,byte,Python,Image,Opencv,Byte,我正在尝试从字符串加载图像,如PHP函数imagecreatefromstring 我该怎么做 我有MySQL blob字段图像。我使用的是MySQLdb,不想在PyOpenCV中创建用于处理图像的临时文件 注意:需要cv(不是cv2)包装函数这是我通常用来将数据库中存储的图像转换为Python中的OpenCV图像的函数 import numpy as np import cv2 from cv2 import cv # Load image as string from file/datab

我正在尝试从字符串加载图像,如PHP函数
imagecreatefromstring

我该怎么做

我有MySQL blob字段图像。我使用的是MySQLdb,不想在PyOpenCV中创建用于处理图像的临时文件


注意:需要cv(不是cv2)包装函数

这是我通常用来将数据库中存储的图像转换为Python中的OpenCV图像的函数

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
的转换,因此上面的脚本将打印:

<type 'str'>
<type 'numpy.ndarray'>
<type 'cv2.cv.iplimage'>

编辑:
从最新的numpy
1.18.5+
开始,
np.fromstring
会发出警告,因此应在该位置使用
np.fromsbuffer

我尝试使用此代码从包含原始缓冲区(普通像素数据)的字符串创建opencv,但在这种特殊情况下不起作用

下面是如何处理此类数据的方法:

image = np.fromstring(im_str, np.uint8).reshape( h, w, nb_planes )
(是的,您需要知道您的图像属性)

如果您的B和G通道被置换,以下是修复方法:

image = cv2.cvtColor(image, cv2.cv.CV_BGR2RGB)
我认为关于stackoverflow问题的答案是这个问题更好的答案

引用详细信息(从上述链接答案中借用@lamhoangtung)


使用cv2和cv(导入cv2,从cv2导入cv)。但返回的不是lplimage,也不是cvMat。函数GetSize not working
src=image\u create\u from\u string(str)cv.GetSize(src)
我建议您只使用cv2,只要它使用的numpy数组在Python中比cvMat和lplimage更有效。函数GetSize在cv2中不起作用,因为cv2使用numpy,而您使用np.shape(image)来获取图像的大小。在任何情况下,如果您想将表单cv2 ndarray转换为cv lplimage,请检查以下答案:我明白。你能在cv包装器中编写这个函数吗?使用OpenCV 3+使用
cv2.IMREAD\u COLOR
而不是
cv2.cv\u LOAD\u IMAGE\u COLOR
我也有这个问题-为什么会出现这个问题?有没有办法像另一个答案那样绕过(h,w)问题?谢谢您能更精确地定义您的问题吗?在这种情况下,没有标题,所以您无法猜测图像属性。(除非您决定始终接收4/3或16/9比例的图像)以使其更详细:img=cv2.imdecode(jpg\u as\u np,cv2.IMREAD\u COLOR)
import base64
import json
import cv2
import numpy as np

response = json.loads(open('./0.json', 'r').read())
string = response['img']
jpg_original = base64.b64decode(string)
jpg_as_np = np.frombuffer(jpg_original, dtype=np.uint8)
img = cv2.imdecode(jpg_as_np, flags=1)
cv2.imwrite('./0.jpg', img)