我正在用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)

但这样做,应用程序的运行非常奇怪,并不断打开一个新的窗口.有没有办法实现这一点?

推荐答案

The Cause of the Problem:

Each window in opencv has a unique name. The window is created with this name either when you call cv2.namedWindow, or implicitly when you call cv2.imshow with a new name.
By using:

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

实际上,每当这fps_text个窗口与以前的不同时,您都会创建新的窗口.

The Solution:

每个OpenCV窗口还具有title属性.默认情况下,窗口标题是窗口的唯一名称,但这是两个不同的实体.

您可以使用cv2.setWindowTitle来修改标题:

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

Note窗口唯一名称不变.

Python-3.x相关问答推荐

CONNEXION.EXCEPTIONS.ResolverError:运行pyz文件时未命名模块

tkinter/python3.9 中的 Entry 子类和用户输入重复的问题

如何创建与导航抽屉一起使用的导航栏

如何将日期时间索引写入日期类型的表?

在 Django 中执行 JSONRenderer.render(serialized_student_data.data) 时遇到问题

python用户输入5个偶数并打印最大的

python 3:如何判断一个对象是否是一个函数?

ImportError:没有名为资源的模块

pip install mysqlclient 失败为 mysqlclient 运行 setup.py bdist_wheel ... 错误

Python:如何判断一个项目是否被添加到一个集合中,没有 2x(hash,lookup)

PySpark python 问题:Py4JJavaError: An error occurred while calling o48.showString

Tkinter AttributeError:对象没有属性'tk'

Python过滤器函数 - 单个结果

cv2 python 没有 imread 成员

如何在多核上运行 Keras?

Asyncio RuntimeError:事件循环已关闭

AttributeError:LinearRegression 对象没有属性coef_

类型提示返回 NameError: name 'datetime' not defined

如何在 QGraphicsView 中启用平移和zoom

如何从集合中删除多个元素?