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) # 讓它睡!
同事真的太強大了
Comments
Post a Comment