Kivy相机显示旋转了90度

2024-09-30 06:20:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python和kivy框架访问android4.4中的相机。在

这是我的简单代码:

from kivy.app import App
from kivy.uix.camera import Camera
from kivy.core.window import Window

class CamApp(App):
    def build(self):
        return Camera(resolution= Window.size)

CamApp().run()

但当我运行代码时,它显示了:

enter image description here

理想情况下,它应该是这样的:

enter image description here

看起来kivy相机显示的输出是内置的-90度。这是正常现象还是错误?还是我自己旋转显示器?在


Tags: 代码fromcoreimport框架appwindowclass
3条回答

我认为这是一个bug,但是如果您使用以下代码,您可以旋转小部件:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
import time
Builder.load_string('''
<CameraClick>:
    orientation: 'vertical'
    Camera:
        id: camera
        resolution: (640, 480)
        play: False
    ToggleButton:
        text: 'Play'
        on_press: camera.play = not camera.play
        size_hint_y: None
        height: '48dp'
    Button:
        text: 'Capture'
        size_hint_y: None
        height: '48dp'
        on_press: root.capture()
    canvas.before:
        PushMatrix
        Rotate:
            angle: -90
            origin: self.center
    canvas.after:
        PopMatrix
''')


class CameraClick(BoxLayout):
    def capture(self):
        '''
        Function to capture the images and give them the names
        according to their captured time and date.
        '''
        camera = self.ids['camera']
        timestr = time.strftime("%Y%m%d_%H%M%S")
        camera.export_to_png("IMG_{}.png".format(timestr))
        print("Captured")


class TestCamera(App):

    def build(self):
        return CameraClick()


TestCamera().run()

这对我在android上很管用。在

最好在kivy代码中使用opencv。它为你提供了一系列操作图片和视频的选项和工具。 准备好了。 我有180度翻转问题,并用opencv解决了。你可以使用我的代码和这个链接:https://www.tutorialkart.com/opencv/python/opencv-python-rotate-image/

import os

import cv2
from kivy.app import App
from kivy.clock import Clock
from kivy.graphics.texture import Texture
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.image import Image


class KivyCamera(Image):
    def __init__(self, capture=None, fps=0, **kwargs):
        super(KivyCamera, self).__init__(**kwargs)
        # self.capture = cv2.VideoCapture("/sdcard2/python-apk/2.mp4")
        # print "file path exist :" + str(os.path.exists("/sdcard2/python-apk/1.mkv"))
        self.capture = cv2.VideoCapture(0)
        Clock.schedule_interval(self.update, 1.0 / fps)

    def update(self, dt):
        ret, frame = self.capture.read()
        # print str(os.listdir('/sdcard2/'))
        if ret:
            # convert it to texture
            buf1 = cv2.flip(frame, 0)
            buf = buf1.tostring()
            image_texture = Texture.create(size=(frame.shape[1], frame.shape[0]), colorfmt='bgr')
            image_texture.blit_buffer(buf, colorfmt='bgr', bufferfmt='ubyte')
            # display image from the texture
            self.texture = image_texture


class CamApp(App):
    def build(self):
        self.my_camera = KivyCamera(fps=12)
        self.box = BoxLayout(orientation='vertical')
        btn1 = Button(text="Hello")
        self.box.add_widget(btn1)
        # l = Label(text=cv2.__version__, font_size=150)
        # self.box.add_widget(l)
        self.box.add_widget(self.my_camera)
        return self.box

    def on_stop(self):
        # without this, app will not exit even if the window is closed
        # self.capture.release()
        pass

    def on_pause(self):
        return True


if __name__ == '__main__':
    CamApp().run()enter code here

克里斯蒂安的解决方案对我不起作用。 它将在画布之前是这样写的:

kivy.lang.parser.ParserException: Parser: File "<inline>", line 21:
I python  :  ...
I python  :       19:        height: '48dp'
I python  :       20:        on_press: root.capture()
I python  :  >>   21:    canvas.before:
I python  :       22:        PushMatrix
I python  :       23:        Rotate:
I python  :  ...
I python  :  Invalid class name

关于那件事画布之前以及画布后只能在其他对象中调用以下代码对我有效:

^{pr2}$

资源:

相关问题 更多 >

    热门问题