亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 PyQt 中動態調整視頻大小

在 PyQt 中動態調整視頻大小

不負相思意 2023-04-25 16:42:38
我正在用頭撞墻試圖弄清楚如何調整和重新排列我在 Raspberry Pi 上構建的相機應用程序。我希望能夠通過點擊視頻來調整窗口大小,從全屏應用程序到將顯示在觸摸屏一角的較小版本。https://github.com/eighty2fifty1/multicam我正在使用 OpenCV 來運行相機本身。雖然該應用程序的目的是運行 4 個攝像頭并在它們之間切換,但這一切都發生在外部硬件中,因此只需將其視為顯示一個 USB 網絡攝像頭即可。我還沒有完全準備好為此使用 OpenCV,但到目前為止它已經奏效了。當我嘗試調整窗口大小、最小化或最大化窗口時,我的 RPi 4 似乎也出現分段錯誤。不確定這是否相關,但我已經嘗試使用兩張全新的 SD 卡來排除硬件問題。我試過的:以編程方式重新排列窗口。不會顯示視頻,還會給我一個分段錯誤。將 MyWindowClass 子類化為 BigWindowClass 和 SmallWindowClass,然后將單獨的 .ui 文件發送到它們各自的類,然后使用 .show() 和 .hide() 方法來確定我想顯示哪一個。這將在大窗口中顯示視頻,而不是小窗口。為了清楚起見,我省略了一些函數,但完整的源代碼在上面的 github 鏈接中。class Thread(QThread):    global file, big, small    changePixmap = pyqtSignal(QImage)    def run(self):        cap = cv2.VideoCapture(0)        while running:            ret, frame = cap.read()            if ret:                # not sure if the queue was necessary to prevent memory or processor problems                if q.qsize() < 10:                    q.put(frame)                else:                    print(q.qsize())                if not q.empty():                    f = q.get()                    rgbImage = cv2.cvtColor(f, cv2.COLOR_BGR2RGB)                    h, w, ch = rgbImage.shape                    bytesPerLine = ch * w                    convertToQtFormat = QImage(rgbImage.data, w, h, bytesPerLine, QImage.Format_RGB888)                    if file == big:                        p = convertToQtFormat.scaled(640, 480, Qt.KeepAspectRatio)                    elif file == small:                        p = convertToQtFormat.scaled(200, 150, Qt.KeepAspectRatio)                    else:                        pass                    self.changePixmap.emit(p)        if self.isFinished():            print("thread killed")class MyWindowClass(QMainWindow, form_class):    def __init__(self, parent=None):        QMainWindow.__init__(self, parent)        self.setupUi(self)        self.sel = Selector()        self.press = 0        self.rel = 0
查看完整描述

1 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

所以我自己找到了解決方案。它可能不是最優雅或最有效的,但它正在工作。當來自 OpenCV 的圖片太大以至于我需要先復制我的 QImage時,我從 Qt 崩潰中得到了一個重要線索。

convertToQtFormat = QImage(rgbImage.data, w, h, bytesPerLine, QImage.Format_RGB888)

i = convertToQtFormat.copy()

self.changePixmap.emit(i)

我重新審視了對主窗口進行子類化并使用 2 個單獨的 .ui 文件的嘗試,經過更多調整后,該程序按預期運行。

查看完整回答
反對 回復 2023-04-25
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號