国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用pysimplegui+opencv編寫一個(gè)攝像頭的播放器

這篇具有很好參考價(jià)值的文章主要介紹了使用pysimplegui+opencv編寫一個(gè)攝像頭的播放器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

需求

使用pysimplegui和opencv實(shí)現(xiàn)一個(gè)播放器,播放 攝像頭的畫面。

代碼實(shí)現(xiàn)


import cv2
import time
from typing import Iterable, NamedTuple, Optional

import PySimpleGUI as sg

class CameraSpec(NamedTuple):
    name: str
    index: int
    width: int
    height: int
    fps: int

def init_window(theme_name: str = "DarkBlack", window_name: str = "UVC capture"):
    print(f"init theme with name {theme_name!r}")
    sg.theme(theme_name)

    layout = [
      [sg.Text('UVC Demo', size=(60, 1), justification='center')],
      [sg.Image(filename='', key='-IMAGE-')],
      [sg.Button('退出', size=(10, 1), key='-Exit-')]
    ]

    print(f"init window with name {window_name!r}")
    window = sg.Window(window_name, layout, location=(10, 10), resizable=True)
    return window

def main(camera_spec: CameraSpec):
    print(f"init {camera_spec.index}th camera with name {camera_spec.name}")
    capture = cv2.VideoCapture(camera_spec.index)
    if capture == None:
        print(f"No matching camera with CameraSpec {camera_spec} found")
        return
    
    size = (int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    print(f"get size:{size}")

    wret = capture.set(cv2.CAP_PROP_FRAME_WIDTH, camera_spec.width)
    hret = capture.set(cv2.CAP_PROP_FRAME_HEIGHT, camera_spec.height)
    print(f"wret:{wret} hret:{hret}")
    size = (int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    print(f"get size:{size}")

    
    window = init_window(window_name=camera_spec.name)
    #last_update = time.perf_counter()

    try:
        keep_running = True
        i  = 0
        while keep_running:
            before = time.perf_counter()
            event, values = window.read(timeout=5)
            if event == '-Exit-' or event == sg.WIN_CLOSED:
                break

            after_event = time.perf_counter()
            print(f"====after_event:{after_event-before}====")

            try:
                _, frame = capture.read()
            except TimeoutError:
                pass
            else:
                after_frame = time.perf_counter()
                print(f"after_frame:{after_frame-after_event}")

                #將每一幀編碼成png播放
                imgbytes = cv2.imencode('.png', frame)[1].tobytes()
                
                after_show = time.perf_counter()
                print(f"after_show:{after_show-after_frame}")
                print(f"sum:{after_show-before}")
                window['-IMAGE-'].update(data=imgbytes)

                #cv2.imshow(camera_spec.name, bgr)  
                # if cv2.waitKey(1) & 0xFF == 27:
                #    break  
                # with open(f"bgr{i}.bgr",'wb') as f:
                #     f.write(bgr)
                # i += 1
    except KeyboardInterrupt:
        pass

    capture.close()
    print(f"close camera:{camera_spec}")


if __name__ == "__main__":
    main(
            CameraSpec(
                name="播放攝像頭測(cè)試",
                index=0, #攝像頭編號(hào)
                width=1280,
                height=720,
                fps=10,
            ),

    )

效果:
使用pysimplegui+opencv編寫一個(gè)攝像頭的播放器,這就是opencv,opencv,python,gui,播放器,uvc攝像頭

代碼說明

打開攝像頭:

capture = cv2.VideoCapture(camera_spec.index)

從攝像頭取幀:

_, frame = capture.read()

將幀送到窗口播放:

#將每一幀編碼成png圖片
imgbytes = cv2.imencode('.png', frame)[1].tobytes()
window['-IMAGE-'].update(data=imgbytes)  #這里播放

由于使用PySimpleGUI的Image作為播放控件,所以每一幀都要轉(zhuǎn)換成圖片。除了png, 好像tif也可以,我沒試。
從這里也可以看出來,pysimplegui播放的效率還是有點(diǎn)低的,要先編碼成圖片。但是作為一些小工具來講,可以接受。文章來源地址http://www.zghlxwxcb.cn/news/detail-818616.html

到了這里,關(guān)于使用pysimplegui+opencv編寫一個(gè)攝像頭的播放器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 如何使用Opencv調(diào)用電腦攝像頭?

    當(dāng)我們想要使用opencv對(duì)視頻圖像進(jìn)行處理時(shí),往往第一步便是需要調(diào)用電腦攝像頭,下面博主將提供兩種版本的代碼(含詳細(xì)注釋),幫助大家學(xué)習(xí)如何使用Opencv調(diào)用電腦攝像頭進(jìn)行視頻錄制并保存: 一、C++版本 1. 從相機(jī)中讀取視頻 2. 從文件中讀取視頻 3. 保存視頻 二、P

    2024年02月11日
    瀏覽(93)
  • 使用opencv調(diào)用外接攝像頭

    使用opencv調(diào)用外接攝像頭

    當(dāng)我們使用opencv調(diào)用攝像頭的命令?cv2.VideoCapture(0),可能會(huì)出現(xiàn)下面這個(gè)錯(cuò)誤。 [ERROR:0@0.433] global obsensor_uvc_stream_channel.cpp:156 cv::obsensor::getStreamChannelGroup Camera index out of range 表明在嘗試獲取攝像機(jī)流通道組時(shí),使用的攝像機(jī)索引超出了有效范圍。這通常意味著你嘗試訪問的攝

    2024年02月03日
    瀏覽(26)
  • 使用OpenCV調(diào)用攝像頭和讀取視頻圖片

    使用OpenCV調(diào)用攝像頭和讀取視頻圖片

    要捕獲視頻,你需要?jiǎng)?chuàng)建一個(gè) VideoCapture 對(duì)象。它的參數(shù)是設(shè)備索引的名稱。設(shè)備索引就是指定哪個(gè)攝像頭的數(shù)字。正常情況下,內(nèi)部攝像頭可以通過傳入0來調(diào)用,傳遞1來選擇外置的第二個(gè)相機(jī),以此類推。在此之后,你可以逐幀捕獲。但是在最后,不要忘記釋放俘虜。 直

    2024年02月08日
    瀏覽(28)
  • 【計(jì)算機(jī)視覺 · OpenCV】使用 OpenCV 調(diào)用手機(jī)攝像頭

    【計(jì)算機(jī)視覺 · OpenCV】使用 OpenCV 調(diào)用手機(jī)攝像頭

    Droidcam 是一款可以將手機(jī)變成網(wǎng)絡(luò)攝像頭的工具,我們可以利用 Droidcam 讓 OpenCV 擁有調(diào)用手機(jī)攝像頭的能力。 2.1 安裝 DroidCam 在手機(jī)和電腦上分別安裝 DroidCam 的客戶端和服務(wù)端 下載地址:https://pan.baidu.com/s/1DrBn3P1Bx-SXa4d6oziifA?pwd=gr1o 提取碼:gr1o 2.2 測(cè)試連接狀態(tài) 手機(jī)和電腦需

    2024年02月09日
    瀏覽(31)
  • Python進(jìn)階,使用 opencv 調(diào)用攝像頭進(jìn)行拍照

    ? ? ? ? ?opencv 支持 Python 版本的模塊叫作 opencv-p hon ,可直接使用 pip install opencv-python 令進(jìn)行安裝,但常常會(huì)因?yàn)榫W(wǎng)絡(luò)等問題導(dǎo)致失敗。推薦使用離線模式來安裝 opencv 模塊。 下載完安裝包后,使用如下命令進(jìn)行安裝: D: pip install opencv

    2024年02月11日
    瀏覽(27)
  • 使用 MFC 和 OpenCV 實(shí)現(xiàn)實(shí)時(shí)攝像頭視頻顯示

    1、引言 MFC 是一個(gè)在 Windows 平臺(tái)上編寫 C++ 應(yīng)用程序的庫,提供了豐富的用戶界面功能。OpenCV(Open Source Computer Vision Library)是一個(gè)開源的計(jì)算機(jī)視覺庫,包含了豐富的圖像處理和計(jì)算機(jī)視覺功能。本文將向大家展示如何將這兩個(gè)庫結(jié)合起來,實(shí)現(xiàn)一個(gè)實(shí)時(shí)顯示攝像頭畫面的簡

    2024年02月13日
    瀏覽(113)
  • cv2.VideoCapture使用,opencv讀取攝像頭,視頻圖像

    ????????cv2.VideoCapture()用于讀取視頻,也可以用于讀取攝像頭圖像。 ????????上面的2種寫法,第一種表示讀取攝像頭,第二種讀取視頻文件,返回值就是視頻數(shù)據(jù)。 ????????在讀取到視頻后,可以使用isOpened方法來判斷視頻是否能夠打開,能打開返回True,不能夠打

    2024年02月12日
    瀏覽(27)
  • Jetson Orin Nano 使用OpenCV調(diào)用USB攝像頭

    Jetson Orin Nano 使用OpenCV調(diào)用USB攝像頭

    Jetson Orin Nano 8G ubuntu 20.04 檢查usb攝像頭是否被識(shí)別到 或者 Jetson Orin Nano 使用OpenCV調(diào)用USB攝像頭

    2024年01月21日
    瀏覽(29)
  • 【深度學(xué)習(xí)】python使用opencv調(diào)用攝像頭拍攝并保存圖片

    打開pycharm,新建一個(gè)camerm.py文件,把下面代碼復(fù)制粘貼進(jìn)去就可以了。 需要安裝兩個(gè)庫:pip install opencv-python;pip install numpy

    2024年02月11日
    瀏覽(24)
  • jetson nano 用opencv使用攝像頭(CSI和USB)

    目錄 1.測(cè)試攝像頭是否可用 查看是否連接到攝像頭 ?CSI攝像頭測(cè)試 USB攝像頭測(cè)試 2.若以上步驟正常,進(jìn)行oepncv讀取攝像頭數(shù)據(jù) (1)CSI攝像頭 1.安裝v4l2-utils協(xié)助工具 2.查看攝像頭詳細(xì)參數(shù)--支持的圖片大小和對(duì)應(yīng)幀率 3.安裝管道gstreamer庫 4.使用opencv讀取圖片例程 (2)USB攝像

    2024年02月08日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包