簡體   English   中英

如何在 Python 中 cv2 的 window 標題上動態更新 FPS

[英]How to update FPS dynamically on window title of cv2 in Python

我正在使用python opencv做一些視頻相關的工作。 我還在計算 FPS 並將其顯示在 cv2 window 的左上角。 現在我不想在左上角顯示它,而是想在 window 標題上顯示它。 下面是代碼:

import cv2
import datetime
import imutils

def GetCoord(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        print("X: {} | Y: {}".format(x, y))

winName = "My Project"
cv2.namedWindow(winName)
cv2.setMouseCallback(winName, GetCoord)

cap = cv2.VideoCapture(0)
fps_start_time = datetime.datetime.now()
fps = 0
total_frames = 0

while True:
    ret, frame = cap.read()
    frame = imutils.resize(frame, width=800)
    total_frames = total_frames + 1
    fps_end_time = datetime.datetime.now()
    time_diff = fps_end_time - fps_start_time
    if time_diff.seconds == 0:
        fps = 0.0
    else:
        fps = (total_frames / time_diff.seconds)
    fps_text = "FPS: {:.2f}".format(fps)
    cv2.putText(frame, fps_text, (5, 30), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1)
    cv2.imshow(winName, frame)
    key = cv2.waitKey(1)
    if key == ord('q'):
        break

cv2.destroyAllWindows()

我不想將其顯示在左上角,而是執行以下操作:

cv2.imshow(winName + " FPS: {}".format(fps_text), frame)

但是這樣做,應用程序執行得很奇怪,並不斷打開一個新的 windows。 有沒有辦法做到這一點?

問題的原因:

在 opencv 中,每個 window 都有一個唯一的名稱 window 在您調用cv2.namedWindow時使用此名稱創建,或者在您使用新名稱調用cv2.imshow時隱式創建。
通過使用:

cv2.imshow(winName + " FPS: {}".format(fps_text), frame)

每次fps_text與以前不同時,您實際上都會創建新的 windows。

解決方案:

opencv window 也具有標題屬性。 默認情況下 window 標題是 window 唯一名稱,但這是 2 個不同的實體。

您可以使用cv2.setWindowTitle來修改標題:

fps_text = "{:.2f}".format(fps)
winTitle = winName + " FPS: {}".format(fps_text)
cv2.setWindowTitle(winName, winTitle)

請注意,window 唯一名稱不會更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM