- Kivy 教程
- Kivy - 首页
- Kivy 基础
- Kivy - 入门
- Kivy - 安装
- Kivy - 架构
- Kivy - 文件语法
- Kivy - 应用
- Kivy - Hello World
- Kivy - 应用生命周期
- Kivy - 事件
- Kivy - 属性
- Kivy - 输入
- Kivy - 行为
- Kivy 按钮
- Kivy - 按钮
- Kivy - 按钮事件
- Kivy - 按钮颜色
- Kivy - 按钮大小
- Kivy - 按钮位置
- Kivy - 圆形按钮
- Kivy - 禁用按钮
- Kivy - 图片按钮
- Kivy 小部件
- Kivy - 小部件
- Kivy - 标签
- Kivy - 文本输入
- Kivy - 画布
- Kivy - 线
- Kivy - 复选框
- Kivy - 下拉列表
- Kivy - 窗口
- Kivy - 滚动视图
- Kivy - 走马灯
- Kivy - 滑块
- Kivy - 图片
- Kivy - 弹出窗口
- Kivy - 开关
- Kivy - 微调器
- Kivy - 分隔器
- Kivy - 进度条
- Kivy - 气泡
- Kivy - 标签面板
- Kivy - 散点图
- Kivy - 手风琴
- Kivy - 文件选择器
- Kivy - 颜色选择器
- Kivy - 代码输入
- Kivy - 模态视图
- Kivy - 切换按钮
- Kivy - 相机
- Kivy - 树视图
- Kivy - reStructuredText
- Kivy - 动作栏
- Kivy - 播放器
- Kivy - 模板视图
- Kivy - 虚拟键盘
- Kivy - 触摸涟漪
- Kivy - 音频
- Kivy - 视频
- Kivy - 拼写
- Kivy - 效果
- Kivy - 输入记录器
- Kivy - OpenGL
- Kivy - 文本
- Kivy - 文本标记
- Kivy - 设置
- Kivy 布局
- Kivy - 布局
- Kivy - 浮动布局
- Kivy - 网格布局
- Kivy - 箱式布局
- Kivy - 堆叠布局
- Kivy - 锚定布局
- Kivy - 相对布局
- Kivy - 页面布局
- Kivy - 循环布局
- Kivy - 布局嵌套
- Kivy 高级概念
- Kivy - 配置对象
- Kivy - 图集
- Kivy - 数据加载器
- Kivy - 缓存管理器
- Kivy - 控制台
- Kivy - 动画
- Kivy - 多笔画
- Kivy - 时钟
- Kivy - SVG
- Kivy - UrlRequest
- Kivy - 剪贴板
- Kivy - 工厂
- Kivy - 手势
- Kivy - 语言
- Kivy - 图形
- Kivy - 绘图
- Kivy - 打包
- Kivy - Garden
- Kivy - 存储
- Kivy - 向量
- Kivy - 工具
- Kivy - 检查器
- Kivy - 工具
- Kivy - 日志记录器
- Kivy - 帧缓冲区
- Kivy 应用和项目
- Kivy - 绘图应用
- Kivy - 计算器应用
- Kivy - 计时器应用
- Kivy - 相机处理
- Kivy - 图片查看器
- Kivy - 贝塞尔曲线
- Kivy - 画布压力测试
- Kivy - 圆形绘制
- Kivy - 小部件动画
- Kivy - 其他
- Kivy 有用资源
- Kivy - 快速指南
- Kivy - 有用资源
- Kivy - 讨论
Kivy - 相机处理
Kivy 框架通过特定平台的提供程序支持相机硬件。“opncv-python”包可在大多数操作系统上为 Kivy 提供相机支持。因此,建议在 Kivy 的工作环境中安装 opencv-python 包。
在本章中,我们将使用 Kivy 库的 Camera 类构建一个相机应用程序。相机小部件以及一个切换按钮和一个普通按钮放置在一个垂直的盒子布局中,以构建应用程序界面。
相机实例以初始播放状态 True 开始,这意味着应用程序窗口将在加载后立即从相机启动视频流。切换按钮在按下时停止相机。它绑定到 play() 方法。只有在相机正在播放时,“捕获”按钮才处于启用状态。
def play(self, instance): if instance.state=='down': self.mycam.play=False instance.text='Play' self.cb.disabled=True else: self.mycam.play=True instance.text='Stop' self.cb.disabled=False
“捕获”按钮通过调用 Camera 对象的 export_to_png() 方法将当前帧保存到 PNG 文件。
捕获图像后,Kivy 会弹出一个标题为“图像已捕获”的消息框。
def capture(self, instance): if self.tb.text == 'Stop': self.mycam.export_to_png("IMG.png") layout = GridLayout(cols=1) popup = Popup( title='Image Captured', title_size=24, content=layout, auto_dismiss=True, size_hint=(None, None), size=(300, 100) ) popup.open()
其余代码涉及在 build() 方法中组成应用程序界面。
示例
完整的代码如下所示:
from kivy.app import App from kivy.lang import Builder from kivy.uix.boxlayout import BoxLayout from kivy.uix.togglebutton import ToggleButton from kivy.uix.button import Button from kivy.uix.popup import Popup from kivy.uix.camera import Camera from kivy.core.window import Window Window.size = (720, 400) class TestCamera(App): def build(self): box = BoxLayout(orientation='vertical') self.mycam = Camera(play=True, resolution=(640, 480)) box.add_widget(self.mycam) self.tb = ToggleButton( text='Stop', size_hint_y=None, height='48dp', on_press=self.play ) box.add_widget(self.tb) self.cb = Button( text='Capture', size_hint_y=None, height='48dp', disabled=False, on_press=self.capture ) box.add_widget(self.cb) return box def play(self, instance): if instance.state == 'down': self.mycam.play = False instance.text = 'Play' self.cb.disabled = True else: self.mycam.play = True instance.text = 'Stop' self.cb.disabled = False def capture(self, instance): if self.tb.text == 'Stop': self.mycam.export_to_png("IMG.png") layout = GridLayout(cols=1) popup = Popup( title='Image Captured', title_size=24, content=layout, auto_dismiss=True, size_hint=(None, None), size=(300, 100) ) popup.open() TestCamera().run()
输出
应用程序启动时加载相机实例。请注意,根据系统和相机设备的不同,启动可能需要几秒钟。切换按钮的标题为“停止”,捕获按钮已启用。
如果按下“停止”按钮,捕获按钮将被禁用。启用后,按下“捕获”按钮。当前帧将保存为“img.png”,并弹出一个对话框。
广告