我正在用頭撞墻試圖弄清楚如何調(diào)整和重新排列我在 Raspberry Pi 上構(gòu)建的相機(jī)應(yīng)用程序。我希望能夠通過(guò)點(diǎn)擊視頻來(lái)調(diào)整窗口大小,從全屏應(yīng)用程序到將顯示在觸摸屏一角的較小版本。https://github.com/eighty2fifty1/multicam我正在使用 OpenCV 來(lái)運(yùn)行相機(jī)本身。雖然該應(yīng)用程序的目的是運(yùn)行 4 個(gè)攝像頭并在它們之間切換,但這一切都發(fā)生在外部硬件中,因此只需將其視為顯示一個(gè) USB 網(wǎng)絡(luò)攝像頭即可。我還沒(méi)有完全準(zhǔn)備好為此使用 OpenCV,但到目前為止它已經(jīng)奏效了。當(dāng)我嘗試調(diào)整窗口大小、最小化或最大化窗口時(shí),我的 RPi 4 似乎也出現(xiàn)分段錯(cuò)誤。不確定這是否相關(guān),但我已經(jīng)嘗試使用兩張全新的 SD 卡來(lái)排除硬件問(wèn)題。我試過(guò)的:以編程方式重新排列窗口。不會(huì)顯示視頻,還會(huì)給我一個(gè)分段錯(cuò)誤。將 MyWindowClass 子類(lèi)化為 BigWindowClass 和 SmallWindowClass,然后將單獨(dú)的 .ui 文件發(fā)送到它們各自的類(lèi),然后使用 .show() 和 .hide() 方法來(lái)確定我想顯示哪一個(gè)。這將在大窗口中顯示視頻,而不是小窗口。為了清楚起見(jiàn),我省略了一些函數(shù),但完整的源代碼在上面的 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貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
所以我自己找到了解決方案。它可能不是最優(yōu)雅或最有效的,但它正在工作。當(dāng)來(lái)自 OpenCV 的圖片太大以至于我需要先復(fù)制我的 QImage時(shí),我從 Qt 崩潰中得到了一個(gè)重要線索。
convertToQtFormat = QImage(rgbImage.data, w, h, bytesPerLine, QImage.Format_RGB888)
i = convertToQtFormat.copy()
self.changePixmap.emit(i)
我重新審視了對(duì)主窗口進(jìn)行子類(lèi)化并使用 2 個(gè)單獨(dú)的 .ui 文件的嘗試,經(jīng)過(guò)更多調(diào)整后,該程序按預(yù)期運(yùn)行。
添加回答
舉報(bào)
0/150
提交
取消