Python OpenCV load image from byte string

前端 未结 3 1115
小鲜肉
小鲜肉 2020-12-01 01:55

I\'m trying to load image from string like as PHP function imagecreatefromstring

How can I do that?

I have MySQL blob field image. I\'m using

相关标签:
3条回答
  • 2020-12-01 02:29

    I've try to use this code to create an opencv from a string containing a raw buffer (plain pixel data) and it doesn't work in that peculiar case.

    So here's how to do that for this kind of data:

    image = np.fromstring(im_str, np.uint8).reshape( h, w, nb_planes )
    

    (but yes you need to know your image properties)

    if your B and G channel is permuted, here's how to fix it:

    image = cv2.cvtColor(image, cv2.cv.CV_BGR2RGB)
    
    0 讨论(0)
  • 2020-12-01 02:39

    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)
    

    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'>
    

    EDIT: As of latest numpy 1.18.5 +, the np.fromstring raise a warning, hence np.frombuffer shall be used in that place.

    0 讨论(0)
  • 2020-12-01 02:40

    I think this answer provided on this stackoverflow question is a better answer for this question.

    Quoting details (borrowed from @lamhoangtung from above linked answer)

    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)
    
    0 讨论(0)
提交回复
热议问题