【发布时间】:2014-05-19 17:53:59
【问题描述】:
我知道这会有点奇怪,请容忍我提出这个愚蠢的问题,以及一种糟糕的编码风格,因为,我知道一个人不能在构造函数中声明所有内容并同时使用它们。
我的目标是上传静态图片内容。我正在使用库 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())
【问题讨论】:
-
cv2.waitKey(0) 在 highgui 窗口中等待按键,就像 cv2.imshow() 一样。因为你不使用imshow,所以没有窗口,waitKey()根本没有作用
-
谢谢。好的,这意味着没有办法在浏览器中显示静态内容并通过键盘处理事件?
-
@vamosrafa 是的,这不是它的工作方式。与用户交互有不同的方式,一种是通过控制台(键盘输入,文本输出),另一种是通过 HTTP(输入 - HTTP 请求,输出 - HTTP 响应中的 html)。你不能混合它们。如果您希望您的应用程序从浏览器对键盘做出反应,您需要使用客户端 Javascript 代码。
-
安德烈:谢谢,我也是这么想的。所以我需要使用 AJAX 或 Jquery。这是非常基本的东西,只有静态图像,所以我不想让它变得复杂。此外,我想要一个快速的应用程序,响应时间短。指向此的任何指针,指向用户 javascript,因为,我还没有使用它。
-
@vamosrafa 不用担心快速申请。首先让 working 成为一个。看起来您对 Web 开发的一般工作原理知之甚少。关于 python(服务器端)我推荐关于 JS 的烧瓶(flask.pocoo.org/docs/tutorial),只是 google 的 JS 和 jQuery 教程,有很多好的。
标签: python python-2.7 opencv cherrypy