numpy Base64到opencv并返回到Dash中显示

kb5ga3dv  于 2023-02-23  发布在  其他
关注(0)|答案(1)|浏览(242)

我需要读取Base64编码的图像(由用户上传到Dash应用程序),使用opencv进行一些操作(现在跳过此操作),并将其转换回Base64,以便它可以在浏览器中显示。问题是,我从来没有设法在浏览器中看到输出图像,但我没有得到任何错误。

def parse_contents(contents):
    img1 = data_uri_to_cv2_img(contents)
    _, buffer = cv2.imencode('.jpg', img1)
    jpg_as_text = base64.b64encode(buffer.tobytes())
    second_part = str(jpg_as_text).split('/', 1)[-1]
    to_save = contents.split(',')[0]
    one_string = to_save + ',' + '/'+ second_part
    
return html.Div([
       html.Img(src=one_string, style={'height':'10%', 
    'width':'10%'}),
    html.Hr(),
    html.Div('Raw Content'),
    html.Pre(one_string + '...', style={
       'whiteSpace': 'pre-wrap',
       'wordBreak': 'break-all'
    })
])

@app.callback(
    Output('output-image-upload', 'children'),
    Input('store-data', 'data')
)

输入数据如下所示:内容物=

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMA..

当我在笔记本中运行代码时,我看到输出图像,但在应用程序中,它看起来像在图片上

l5tcr1uw

l5tcr1uw1#

函数cv2.imencode()返回一个Numpy数组,因此需要在编码之前将其转换为常规JPEG文件中的字节数:

_, buffer = cv2.imencode('.jpg', img1)
jpg_as_text = base64.b64encode(buffer.tobytes())
dataURI = 'data:image/jpeg;base64,' + jpg_as_text

return html.Div([ html.Img(src=dataURI, ...)

相关问题