显示视频流

简介: 显示视频流

初始化代码解释

  1. 构造函数 __init__

当创建CAMERAXGO类的一个实例时,构造函数__init__会被调用。

def __init__(self):
    self.display = LCD_2inch.LCD_2inch()          # 创建一个LCD_2inch对象,用于控制2英寸LCD屏幕
    self.display.Init()                            # 初始化LCD屏幕
    self.display.clear()                           # 清除LCD屏幕上的内容
    self.splash = Image.new("RGB", (320, 240), "black")  # 创建一个320x240像素大小的全黑色图片
    self.display.ShowImage(self.splash)           # 在LCD屏幕上显示这个全黑色的图片
    self.camera_still = False                      # 设置摄像头静止状态为False,表示摄像头当前没有打开
    self.cap = None                               # 初始化摄像头捕获对象为None
    pass  # pass语句在这里是多余的,没有实际作用
  1. open_camera 方法

这个方法用于打开摄像头,并设置其分辨率为320x240。

def open_camera(self):
    if self.cap == None:  # 如果摄像头对象还没有被初始化
        self.cap = cv2.VideoCapture(0)  # 打开默认的摄像头(通常是第一个摄像头)
        self.cap.set(3, 320)  # 设置摄像头宽度为320像素
        self.cap.set(4, 240)  # 设置摄像头高度为240像素

屏幕刷新相关代码解释

  1. xgoCamera 方法

这个方法用于控制摄像头的开关,并开启一个线程来显示摄像头的实时画面。

def xgoCamera(self, switch):
    global camera_still  # 这里尝试声明一个全局变量camera_still,但实际上是错误的
    if switch:
        self.open_camera()  # 打开摄像头
        self.camera_still = True  # 设置摄像头为静止状态(这里命名为camera_still可能有些误导,因为True通常表示活动状态)
        t = threading.Thread(target=self.camera_mode)  # 创建一个线程,目标函数为camera_mode
        t.start()  # 启动线程
    else:
        self.camera_still = False  # 设置摄像头为非静止状态(即停止状态)
        time.sleep(0.5)  # 等待0.5秒,可能是为了让摄像头有足够的时间停止
        splash = Image.new("RGB", (320, 240), "black")  # 创建一个新的全黑色图片
        self.display.ShowImage(splash)  # 在LCD屏幕上显示这个全黑色的图片,作为关闭摄像头后的显示内容
  1. camera_mode 方法

这个方法是摄像头显示模式的核心。它在一个无限循环中读取摄像头的帧,并将这些帧显示在LCD屏幕上。

def camera_mode(self):
    self.camera_still = True  # 设置为静止状态
    while 1:  # 无限循环
        success, image = self.cap.read()  # 从摄像头读取一帧图像
        b, g, r = cv2.split(image)  # 将图像的BGR通道分离
        image = cv2.merge((r, g, b))  # 将RGB通道合并(这里有个多余的括号,应该是image = cv2.merge((r, g, b))
        image = cv2.flip(image, 1)  # 将图像水平翻转
        imgok = Image.fromarray(image)  # 将OpenCV的图像格式转换为PIL的图像格式
        self.display.ShowImage(imgok)  # 在LCD屏幕上显示图像
        if not self.camera_still:  # 如果摄像头状态变为非静止(即停止状态),则跳出循环
            break

关于 splash = Image.new("RGB", (320, 240), "black")self.display.ShowImage(splash) 的解释

这两行代码的作用是创建一个新的全黑色图片,并立即在LCD屏幕上显示它。

  • `Image.new("RGB", (320, 240), "black
目录
相关文章
从rtsp视频流中截取图片
从rtsp视频流中截取图片
1829 0
|
5月前
|
消息中间件 编解码 安全
视频流地址的处理
视频流地址的处理
|
存储 编解码 缓存
海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储
Hik防爆摄像头录像,因为防爆摄像头会有对应的APP软件,与普通的网络摄像头和球机不一样,默认认为它不可以通过web网页配置,所以弄了个来实测确认。经测试实际上也是可以通过web网页配置(与网络摄像头基本是一致的,在码流方面可能会有些不一样),然后提取rtsp流的,界面与球机无异,只是没有球机的云台控制功能,但是界面上也是有的。
海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储
|
API Android开发
【Android 高性能音频】Oboe 开发流程 ( 检查 Oboe 音频流属性 | 开始播放 | 停止播放 | 关闭 Oboe 音频流 | 重新配置 Oboe 音频流属性 )
【Android 高性能音频】Oboe 开发流程 ( 检查 Oboe 音频流属性 | 开始播放 | 停止播放 | 关闭 Oboe 音频流 | 重新配置 Oboe 音频流属性 )
249 0
绘制帧率与实际显示时帧率不同步,怎么测得显示帧率?
绘制帧率与实际显示时帧率不同步,怎么测得显示帧率?
179 0
|
移动开发 JavaScript
JS指定音频audio在某个时间点进行播放,获取当前音频audio的长度,音频时长格式转化
JS指定音频audio在某个时间点进行播放,获取当前音频audio的长度,音频时长格式转化
776 0
JS指定音频audio在某个时间点进行播放,获取当前音频audio的长度,音频时长格式转化
|
存储 SQL 数据库
从海康摄像机上读取RTSP视频流并存储当前帧到本地
从海康摄像机上读取RTSP视频流并存储当前帧到本地
2582 0
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )(二)
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )(二)
920 0
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )(二)
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )
595 0
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )(一)
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )(一)
1511 0
【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )(一)

热门文章

最新文章