OpenCVで加工した画像をWebインターフェース(CherryPyで作ったもの)で見せたいです。以下のコードは正常に動作します:
import cherrypy
import cv2
class Picture(object):
def __init__(self):
self.cam = cv2.VideoCapture(0)
@cherrypy.expose
def index(self):
_, image = self.cam.read()
_, data = cv2.imencode('.jpg', image)
cherrypy.response.headers['Content-Type'] = 'image/jpeg'
return data.tostring()
if __name__ == '__main__':
cherrypy.config.update({'server.socket_host': '127.0.0.1', 'server.socket_port': 80, })
cherrypy.quickstart(Picture())
ただし、画像を html に埋め込みたいので、(たとえば) 別の画像や他のデータを同じページに追加できます。
次のコードを試しました:
import cherrypy
import cv2
class Picture(object):
def __init__(self):
self.cam = cv2.VideoCapture(0)
@cherrypy.expose
def index(self):
_, image = self.cam.read()
_, data = cv2.imencode('.jpeg', image)
return """ <html>
<head>
<title>CherryPy static imagl</title>
</head>
<html>
<body>
<img src=" """ + data + """:image/jpeg" />
</body>
</html>"""
if __name__ == '__main__':
cherrypy.config.update({'server.socket_host': '127.0.0.1', 'server.socket_port': 80, })
cherrypy.quickstart(Picture())
しかし、これにより次のエラーが発生します。
<img src=" """ + data + """:image/jpeg" />
TypeError: cannot concatenate 'str' and 'numpy.ndarray' objects
次のコードを使用して numpy arry を文字列に変換しても機能しません (エラーは発生しませんが、文字のみが表示されます)。
<img src=" """ + data.tostring() + """:image/jpeg" />
私にもう少し洞察を与えることができる人はいますか?前もって感謝します!