使用 opencv 和 PlayStation Eye 进行高速视频捕获

发布于 2024-12-05 11:51:53 字数 1185 浏览 1 评论 0原文

我正在开发一个需要低分辨率和大约 110 fps 的项目。所以我买了 30 美元的 PlayStation Eye,它在 320 分辨率和 240 分辨率下提供 120 fps。

我安装了以前版本的 macam(因为最新版本不起作用)并成功获得大约 120 fps(但由于 macam 中的一些错误我无法录制)。

在此处输入图像描述

我编写了一个简单的代码将每一帧保存为 jpg 文件:

 #include <stdio.h>
 #include "cv.h"
 #include "highgui.h"
 #include<iostream>
 using namespace std;

 int main(int argc, char** argv) {

     int i = 0;
     char *buf;
     IplImage *frame;
     CvCapture* capture = cvCreateCameraCapture(3);
     cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, 320);
     cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 240);
     cvSetCaptureProperty( capture, CV_CAP_PROP_FPS, 110);

     while (true) {

         frame = cvQueryFrame(capture);
         asprintf(&buf, "%d.jpg", i++);
         cvShowImage("1", frame);
         cvSaveImage(buf, frame);
         cvWaitKey(10);
     }
     return 0;
 }

但每秒只能保存 30 帧。我的意思是它每秒创建 30 个文件而不是 110 个文件。有什么问题吗?

更新:我使用以下命令编译上面的代码:

g++ main.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv` -o exec -m32

I'm working on a project which need low resolution and about 110 fps. So i bought 30$ PlayStation eye which provide 120 fps in 320 in 240 resolution.

I installed previous version of macam( because latest version didn't work ) and successfully get about 120 fps( but i can't record because of some bugs in macam ).

enter image description here

I wrote a simple code to save each frame as a jpg file:

 #include <stdio.h>
 #include "cv.h"
 #include "highgui.h"
 #include<iostream>
 using namespace std;

 int main(int argc, char** argv) {

     int i = 0;
     char *buf;
     IplImage *frame;
     CvCapture* capture = cvCreateCameraCapture(3);
     cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, 320);
     cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 240);
     cvSetCaptureProperty( capture, CV_CAP_PROP_FPS, 110);

     while (true) {

         frame = cvQueryFrame(capture);
         asprintf(&buf, "%d.jpg", i++);
         cvShowImage("1", frame);
         cvSaveImage(buf, frame);
         cvWaitKey(10);
     }
     return 0;
 }

but it's only save 30 frames per second. I mean it creates 30 files instead of 110 files per second. What's the problem ?

Update: i compile above code using following command:

g++ main.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv` -o exec -m32

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

究竟谁懂我的在乎 2024-12-12 11:51:54

cvWaitKey(10); 等待 10 毫秒。

110Hz 的帧速率需要每 9ms 进行一次快照,此外还有保存帧的处理时间。

因此,除了 CV_CAP_PROP_FPS 无法按预期工作之外,这也是这里的一个问题。

cvWaitKey(10); waits for 10ms.

A frame rate of 110Hz requires a snapshot every 9ms, plus there is processing time for the saving of the frame.

So that's an issue here, in addition to CV_CAP_PROP_FPS not working as expected.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文