我python opencv用來做一些視頻相關的作業。我還在計算 FPS 并將其顯示在 cv2 視窗的左上角。現在,我不想在左上角顯示它,而是想在視窗標題上顯示它。下面是代碼:
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)
但是這樣做,應用程式執行非常奇怪,并不斷打開一個新視窗。有沒有辦法做到這一點?
uj5u.com熱心網友回復:
問題的原因:
在 opencv 中,每個視窗都有一個唯一的名稱。當您呼叫 時,該視窗將使用此名稱創建,或者在您使用新名稱cv2.namedWindow呼叫時隱式創建。
通過使用:cv2.imshow
cv2.imshow(winName " FPS: {}".format(fps_text), frame)
您實際上每次創建新視窗時fps_text都與以前不同。
解決方案:
opencv 視窗也有一個title屬性。默認情況下,視窗標題是視窗唯一名稱,但它們是 2 個不同的物體。
您可以使用cv2.setWindowTitle來修改標題:
fps_text = "{:.2f}".format(fps)
winTitle = winName " FPS: {}".format(fps_text)
cv2.setWindowTitle(winName, winTitle)
請注意,視窗唯一名稱不會更改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506593.html
標籤:python-3.x opencv
上一篇:如何解決AxisError:軸1超出維度0陣列的范圍
下一篇:AttributeError:'builtin_function_or_method'物件沒有屬性'apply'
