首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置相机的fps?

如何设置相机的fps?
EN

Stack Overflow用户
提问于 2012-03-16 23:44:34
回答 1查看 641关注 0票数 2

我使用的是1 1GB内存的图像采集卡inspecta 5,还有一个高速摄像头"EoSens扩展模式,640X480 1869fps,10X8次点击“。我对抓取的编码和对相机的控制都是新手。Inspecta-5抓取器为我提供了不同的选项,比如将请求的帧数从camrea更改为grabber,也从grabber更改为主存。我还可以使用camrea链接将信号发送到相机,并具有不同的曝光时间。但我真的不确定我应该使用什么来获得每秒1000帧的速率,以及如何测试它?根据软件手册,如果我在相机配置文件中设置了以下选项: ReqFrame=1000 GReqFrame=1000,这意味着分别从相机到采集卡传输1000帧和从采集卡传输1000帧到主存。但这是否意味着我有1000fps?

将fps设置为1000的选项是什么?还有,我如何测试它,我真的在一秒钟抓取了1000帧?

这里有一个指向grabber软件手册的链接: mikrotron.de/index.php?de_downloadfiles你可以在"Inspecta Level1 API /2000/XP“部分找到该软件手册。文件名为"i5-level1-sw_manual_e.pdf“,以防有人需要它。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-17 05:14:46

在1000fps的速度下,你没有太多的时间来捕捉一个帧,甚至保存一个帧。使用以下示例,插入您估计的FPS,捕获并保存延迟。在1000fps的速度下,你总共可以有大约.8ms延迟(为什么不是.99999?我不知道-与无法达到的理论最大值或我的旧PC有关)。

代码语言:javascript
复制
public static void main(String args[]) throws Exception {

    int fps = 1000;
    float simulationCaptureNowMS = .40f;
    float simulationSaveNowNowMS = .40f;

    final long simulationCaptureNowNS = (long)(simulationCaptureNowMS * 1000000.0f);
    final long simulationSaveNowNowNS = (long)(simulationSaveNowNowMS * 1000000.0f);
    final long windowNS = (1000*1000000)/fps;
    final long movieDurationSEC = 2;
    long dropDeadTimeMS = System.currentTimeMillis() + (1000* movieDurationSEC);
        while(System.currentTimeMillis() < dropDeadTimeMS){
            long startNS = System.nanoTime(); 
            actionSimulator(simulationCaptureNowNS);
            actionSimulator(simulationSaveNowNowNS);
            long endNS = System.nanoTime();
            long sleepNS = windowNS-(endNS-startNS);
            if (sleepNS<0) {
                System.out.println("Data loss. Try again.");
                System.exit(0);
            }
            actionSimulator(sleepNS);
        }
        System.out.println("No data loss at "+fps+"fps with interframe latency of "+(simulationCaptureNowMS+simulationSaveNowNowMS)+"ms");
}            

private static void actionSimulator(long ns) throws Exception {
    long d = System.nanoTime()+ns;
    while(System.nanoTime()<d) Thread.yield();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9740360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档