- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想减少网络摄像头每秒获取的帧数,这是我正在使用的代码
#!/usr/bin/env python
import cv2
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FPS, 10)
fps = int(cap.get(5))
print("fps:", fps)
while(cap.isOpened()):
ret,frame = cap.read()
if not ret:
break
cv2.imshow('frame', frame)
k = cv2.waitKey(1)
if k == 27:
break
但它没有生效,我仍然默认为 30 fps 而不是 cap.set(cv2.CAP_PROP_FPS, 10)
设置的 10。我想降低帧速率,因为我有一个手检测器,它需要花费大量时间来处理每一帧,我不能将帧存储在缓冲区中,因为它会检测到以前位置的手。我可以使用计时器或其他方式运行检测器,但我认为更改 fps 是一种更简单的方法,但它不起作用,我也不知道为什么。
我在 Windows 8.1 中使用 Opencv 3.4.2 和 Python 3.6.3
最佳答案
设置帧速率并不总是像您期望的那样有效。这取决于两件事:
所以第 (1) 点。您的相机将有一个格式列表,可以将其传送到捕获设备(例如您的计算机)。这可能是 1920x1080 @ 30 fps 或 1920x1080 @ 60 fps,它还指定了一种像素格式。绝大多数消费类相机不允许您以比这更细粒度的方式更改它们的帧速率。大多数捕获库将拒绝更改为相机未宣传的捕获格式。
即使是允许您进行更多控制的机器视觉相机,通常也只提供帧速率的选择(例如 1、2、5、10、15、25、30 等)。如果您想要硬件级别不受支持的帧速率,通常唯一的方法是使用硬件触发。
和第 (2) 点。当您使用 cv.VideoCapture
时,您实际上是在调用特定于平台的库,例如 DirectShow 或 V4L2。我们称之为后端。您可以使用类似以下内容的方式准确指定正在使用的后端:
cv2.VideoCapture(0 + cv2.CAP_DSHOW)
定义了很多 CAP_X
,但只有一些适用于您的平台(例如 CAP_V4L2
仅适用于 Linux)。在 Windows 上,强制系统使用 DirectShow 是一个不错的选择。但是如上所述,如果你的相机只报告它可以输出 30fps 和 60fps,那么请求 10fps 将毫无意义。更糟糕的是,许多设置在 OpenCV 中只是报告 True
而实际上并未实现。您已经看到,大多数时候读取参数会给您带来合理的结果,但是如果未实现该参数(例如,曝光是一个常见的参数),那么您可能会胡说八道。
您最好等待一段时间,然后再阅读最后一张图片。
请谨慎使用此策略。不要这样做:
while capturing:
res, image = cap.read()
time.sleep(1)
您需要确保持续清除相机的帧缓冲区,否则您将开始看到视频出现延迟。像下面这样的东西应该可以工作:
frame_rate = 10
prev = 0
while capturing:
time_elapsed = time.time() - prev
res, image = cap.read()
if time_elapsed > 1./frame_rate:
prev = time.time()
# Do something with your image here.
process_image()
对于像手部检测器这样的应用程序,最好的方法是让一个线程捕获图像并在另一个线程(也控制 GUI)中运行检测器。您的检测器提取最后捕获的图像,运行并显示结果(您可能需要在读取/写入图像缓冲区时锁定对图像缓冲区的访问)。这样,您的瓶颈就是检测器,而不是相机的性能。
关于python-3.x - 在 opencv 3.4.2 中更改帧速率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52068277/
我需要一次发送至少 200 条消息。程序启动后,给15或17发邮件成功,然后报错: 消息错误: com.sun.mail.smtp.SMTPSendFailedException: 421 4.4.2
我目前正在开发一个使用 AVSynthesizer 将文本转换为语音的 iOS 应用程序。 我想要做的是,当合成器在说话时,可以通过 slider 改变发声率,并且说话的速度会发生变化。 我在 sli
假设我们有以下场景: 包含 10,000 条消息的服务总线队列 Azure Functions(使用计划),其中函数设置为 SB 队列的触发器 外部(不受我们控制)系统无法超过特定请求率 如果我尽快对
TextToSpeech有设置语速的方法:setSpeechRate() .但它没有查询当前速度的相反方法。 有没有办法向系统查询该值? 最佳答案 您可能会得到默认的 TTS 语速 Settings.
我有一个关于 NGINX 速率限制的问题。 是否可以根据 JWT token 的解码值进行速率限制?我在文档中找不到任何这样的信息。 或者即使有一种通过创建纯自定义变量(使用 LuaJIT)来进行速率
我有一个带有方向键和 2 个按钮的游戏 handle 。所有这些都是数字的(不是模拟的)。 我有一个处理他们的事件的程序: -(void)gamepadTick:(float)delta {
所以我需要在 OpenCV 中获取网络摄像头的 fps 速率。哪个功能可以做这样的事情? 最佳答案 int cvGetCaptureProperty( CvCapture* capture, int
我四处寻找 CURL 设置文件,但没有在/etc/中找到它,也没有在 curl 站点 ether 上找到太多... 所以基本上我想做的是设置 curl 可以上传的最大速度限制(无论它正在运行多少个实例
我有一个在 Atom 上运行的嵌入式 Linux 系统,这是一个足够新的 CPU,可以有一个不变的 TSC(时间戳计数器),内核在启动时测量其频率。我在自己的代码中使用 TSC 来保持时间(避免内核调
我正在寻找一种以高粒度单独限制 RPC 速率的方法,令我沮丧的是,针对此问题可用的选项并不多。我正在尝试用 gRPC 替换 REST API,对我来说最重要的功能之一是能够为每个路由添加中间件。不幸的
我正在使用 PHP、MySQL 和 Redis 开发 API,并希望对特定调用进行速率限制。 API 位于 CloudFlare 后面。为实现这一点,我将增加每个 IP 地址每小时在 Redis 中进
我正在寻找一种以编程方式(无论是调用库还是独立程序)监视 linux 中实时 ip 流量的方法。我不想要总数,我想要当前正在使用的带宽。我正在寻找与 OS X 的 istat 菜单的网络流量监视器类似
所以我注意到 Apple 更改了 SKStoreProductViewController,禁用了“写评论”按钮。此问题是否有任何解决方法或修复方法? 最佳答案 SKStoreProductViewC
我今天浏览了 Amazon RDS 定价网站,现在确实想知道他们实际上如何计算 I/O 速率? “每 100 万个请求 0.10 美元”到底是什么意思? 谁能举出一些简单的例子,从 EC2 到 RDS
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 5 年前。 Improve
在旧的 API 中,剩余的允许容量显然作为 X-Ratelimit-Remaining 返回HTTP header 。 然而,current version's documentation对此一无所获
在我的 Android 应用程序中,我观察到前置摄像头录制的视频以 7-10 fps 的速度录制,而后置摄像头的工作正常, native 摄像头应用程序确实以 29fps 的速度录制前置摄像头的视频。
我正在编码一个里面有 dvb_teletext 的视频。打开输出流 #1:2 的编码器时出现错误提示。我使用以下命令对我的视频进行编码。 ffmpeg -threads 8 -i input.ts -
我正在使用以下命令为我的视频添加淡入淡出效果 {"-y", "-ss", "" + startMs / 1000, "-t", "" + (endMs - startMs) / 1000, "-i",
我正在尝试使用以下命令通过 FFMPEG 将 avi 视频文件转换为 flv 格式: -i C:\files\input\test.avi -y -ab 448k -ar 48000 -vcodec
我是一名优秀的程序员,十分优秀!