首页 > 解决方案 > 用烧瓶响应opencv(numpy)图像

问题描述

由于我听说过多次写入 SD 卡引起的问题,因此我想直接使用类似对象的文件在烧瓶应用程序(在树莓派上运行)上提供我的图像。在我的应用程序中,我每隔几秒处理一次图像,并且需要使用烧瓶在 Web 界面上显示它们。

我实际上正在尝试这样的事情:

@app.route('/image')
def image():
    img = cv2.imread('raw.png')
    img_str = cv.imencode('.png', img)[1].tostring()
    f = io.BytesIO()
    f.write(img_str)
    f.seek(0)
    #return Response(bytes, mimetype='image/jpeg')
    return send_file(f, mimetype='image/png')

我的目标是每秒使用 ajax 从 Web 界面调用此函数几次,以更新图像。也许也可以使用长期民意调查来代替固定频率。现在我想提供图像而不将其写入 SD 卡。代码示例返回“图像无法显示,因为它包含错误..”

我是烧瓶的新手,也是 opencv 的新手,所以任何建议都会有所帮助。也让我知道是否有一种简单或更好的方法可以使用内置流对象、socketio 或其他方式来提供频繁更新的图像。

谢谢

标签: pythonimageopencvflaskvideo-streaming

解决方案


您应该尝试这种方式:

@app.route('/image')
def image():
    img = cv2.imread('raw.png')
    data = cv.imencode('.png', img)[1].tobytes()
    return Response(b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + data + b'\r\n\r\n', mimetype='multipart/x-mixed-replace; boundary=frame'

推荐阅读