【问题标题】:OpenCV, cherrypy, display image in browser using key pressOpenCV,cherrypy,使用按键在浏览器中显示图像
【发布时间】: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


【解决方案1】:

您可以提供一个接受键盘输入的 JavaScript 文件: serving static content with CherryPy 或者只是将 JavaScript 代码放在 HTML 代码中的脚本标记中。

【讨论】:

  • 拜托,你能用更详细的解释来扩展你的答案吗?链接随时可能过期,因此最好在此处完整描述您的解决方案。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2021-11-25
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
相关资源
最近更新 更多