OpenCV、cherrypy,通过按键在浏览器中显示图像
我知道这个问题可能有点奇怪,请大家耐心点,我知道这个问题听起来有点傻,而且我的编码风格也不太好,因为我知道不应该在构造函数里声明所有东西并直接使用它们。
我这里的目标是上传一张静态图片。我正在使用 opencv
和 'cherrypy'
这两个库。
其中,opencv 用来显示图片,而使用 cherrypy 是为了在浏览器中上传图片,并且通过 waitKey(0)
来刷新这些图片。
问题是,这个方法并没有奏效,我也知道我的设计很糟糕。
我发这个帖子是因为我现在没有其他解决方案了,希望能得到一些帮助,哪怕是小建议也行,我会自己修改代码。
以下是我的代码:
import sys
import cherrypy
import cv2
import base64
class Img(object):
def __init__(self):
self.plat = sys.platform
if self.plat == 'win32':
self.file_dir = "C:\\Users\\user\\Desktop\\fruit\\"
elif self.plat == 'linux2':
self.file_dir = "/host/Users/user/Desktop/fruit/"
print self.plat
print self.file_dir
self.img = cv2.imread(self.file_dir + "orange.jpg")
@cherrypy.expose
def index(self):
self.k = cv2.waitKey(0)
if self.k == 'w':
# self.img = cv2.imread(self.file_dir + "orange.jpg")
_, data = cv2.imencode('.jpeg', self.img)
jpeg_base64 = base64.b64encode(data.tostring())
return """
<html>
<head>
<title>Fruit Nutritional Information</title>
</head>
<html>
<body>
<img src='data:image/jpeg;base64,%s' height = 640 width = 1200 />
</body>
</html
""" % (jpeg_base64)
elif self.k == ord('q'):
sys.exit()
if __name__ == '__main__':
cherrypy.config.update({'server.socket_host': '127.0.0.1', 'server.socket_port':8080 })
cherrypy.quickstart(Img())
1 个回答
0
你可以提供一个JavaScript文件,让它能够接收键盘输入:使用CherryPy提供静态内容。或者,你也可以直接把JavaScript代码放在HTML代码中的