Convert Image to binary stream

后端 未结 1 1105
有刺的猬
有刺的猬 2021-01-16 21:42

There are two sides to my app, on one side I\'m using C++ in order to read the frames from a camera using Pleora\'s EBUS SDK. When this stream is first received, before I co

相关标签:
1条回答
  • 2021-01-16 22:18

    The solution that I've chosen is to convert the image into an 8-bit greyscale image then convert the desired pixel into its 16-bit counterpart. The solution looks like the following:

    import base64
    import io
    from PIL import Image
    
    if request.method == 'GET':
        if request.GET['pos'] and request.GET['frame']:
            pos = json.loads(request.GET['pos'])
            str_frame = json.loads(request.GET['frame'])
    
            # Converts the base64 string into a byte string, we need to encode
            # str_frame as utf-8 first otherwise python3.2 complains about unicode
            b64decoded_frame = base64.b64decode(str_frame.encode('utf-8'))
    
            # This puts the decoded image into a buffer so that I don't need to save
            # it to disk to use it in PIL
            byte_stream = io.BytesIO(b64decoded_frame)
    
            # Open the image and convert it to 8-bit greyscale (mono8)
            img = Image.open(byte_stream).convert('L')
    
            # Get the 8-bit pixel value
            pixel_val = img.getpixel((pos['x'], pos['y']))
    
            # Convert the 8-bit pixel value to 16-bit by holding the rations
            # i.e. n8 / (2^8 - 1) == x16 / (2^16 - 1)
            pixel_val = int(pixel_val / 255 * 65535)
    
    0 讨论(0)
提交回复
热议问题