pyqt5 讀取相機鏡頭的 frame 時,螢幕畫面會一直閃
問題: 工作上遇到了用 pyqt5 顯示畫面,結果螢幕一直閃的問題。 一開始以為是線程的問題,在 vs code 用 debug 模式看半天,把 code 都 print 出來,發現還是無解。 後來又以為是 .ui 檔圖層沒有設定好的問題,圖層調了半天也無解。 最後被同事一語道破:你處理 rgb frame 的時候有沒有 sleep ? 我: ?? 解法: 在 qt 需要顯示 rgb frame 的地方,我們會用 while 迴圈一直去跑,因為讀取的速度太快,qt 來不及處理畫面顯示就跳下一張 frame ,所以會一直閃。 所以每處理完,顯示完一張 frame 之後讓他睡個 0.015 秒,問題解決! 上 code: (以下為示意 code 沒辦法真的跑起來噢!) 設定 QT image →顯示 rgb frame def qt_show_rgb_frame(rgb_frame): ... # rgb_frame 前處理成 rgbImage convertToQtFormat = QImage( rgbImage.data, w, h, bytesPerLine, QImage.Format_RGB888 ) display_frame = convertToQtFormat.scaled(800, 480) self.controller.setFrameImage.emit(display_frame) 用 while 迴圈跑 show_rgb_frame(rgb_frame) 時,每跑完一個迴圈要 sleep 0.015 秒 import time while True: rgb_frame = self.rgb_camera.read() ... # 其他邏輯 self.view.qt_show_rgb_frame(rgb_frame) # 顯示 qt rgb frame 的 function time.sleep(0.015) # 讓它睡! 同事真的太強大了