OpenCV、cherrypy,通过按键在浏览器中显示图像

2 投票
1 回答
1564 浏览
提问于 2025-04-18 01:42

我知道这个问题可能有点奇怪,请大家耐心点,我知道这个问题听起来有点傻,而且我的编码风格也不太好,因为我知道不应该在构造函数里声明所有东西并直接使用它们。

我这里的目标是上传一张静态图片。我正在使用 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代码中的