【问题标题】:Is there any way to specify numpy array to 'Image Widget'?有没有办法将 numpy 数组指定为“Image Widget”?
【发布时间】:2019-04-05 00:45:08
【问题描述】:

我正在寻找一种方法来将 numpy 图像数组 指定为 Image 小部件的 source,而无需保存为“.png”或“.jpg”等文件。 我知道一种使用画布的方法(Texture.create()blit_buffer()Rectangle()).....还有其他方法吗?

import kivy
from kivy.app import App
from kivy.uix.image import Image
from kivy.uix.widget import Widget
import cv2

class Test(Widget):

    img = cv2.imread('0.png', cv2.IMREAD_UNCHANGED)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img = cv2.flip(img, 0)

    # Is it possible to specify cv2(numpy) image to 'Image Widget' directly(without saving as file(jpg,png))?
    w_img = Image(source=img, size=(100, 100)) # >> error
    self.add_widget(w_img)

class DemoApp(App):
    def build(self):
        return Test()

if __name__ == '__main__':
    DemoApp().run()

【问题讨论】:

    标签: python numpy opencv kivy


    【解决方案1】:

    您必须通过Texture 传递图像:

    import kivy
    from kivy.app import App
    from kivy.uix.image import Image
    from kivy.uix.widget import Widget
    from kivy.graphics.texture import Texture
    import cv2
    
    class Test(Widget):
        def __init__(self, **kwargs):
            super(Test, self).__init__(**kwargs)
    
            img = cv2.imread('0.png', cv2.IMREAD_UNCHANGED)
            img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
            img = cv2.flip(img, 0)
            w, h, _ = img.shape
            texture = Texture.create(size=(w, h))
            texture.blit_buffer(img.flatten(), colorfmt='rgb', bufferfmt='ubyte')
    
            w_img = Image(size=(w, h), texture=texture)
            self.add_widget(w_img)
    
    class DemoApp(App):
        def build(self):
            return Test()
    
    if __name__ == '__main__':
        DemoApp().run()
    

    【讨论】:

    • 谢谢!!我不知道Image 小部件可以接受texture=
    • Texture.create(size=(w, h)) 不正确。 Kivy 2.0.0 应该是 Texture.create(size=(h, w))
    • @Jono_R 如果您指出这是一个新的答案会很好,因为 cmets 是不稳定的。
    • 谢谢@eyllanesc。我认为不值得一个新的答案,更新的答案不能少于 6 个字符。这是一个 2 个字符的变化......
    • @Jono_R 这是我的建议,你看你做不做。但由于我的建议,这种变化似乎很重要。再见
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多