c - 如何设置相机的fps?

标签 c image-processing camera frame frame-rate

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

将 fps 设置为 1000 的选项是什么?以及如何测试我是否真的在一秒钟内抓取了 1000 帧????

这里是抓取器软件手册的链接:mikrotron.de/index.php?de_downloadfiles 您可以在“Inspecta Level1 API for WinNT/2000/XP”部分找到软件手册。文件名为“i5-level1-sw_manual_e.pdf”,以备不时之需。

谢谢

最佳答案

在 1,000fps 的情况下,您没有太多时间来捕捉帧甚至保存帧。使用以下示例并插入您估计的 FPS,捕获并保存延迟。在 1,000fps 时,您总共可以有大约 0.8 毫秒的延迟(为什么不是 0.99999?我不知道 - 这与无法达到的理论最大值或我的旧 PC 有关)。

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();
}

关于c - 如何设置相机的fps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9740360/

相关文章:

c++ - 正确校正 GPU 的立体图像(opencv)

安卓2.2。人像相机预览

c - 没有类型的外部

c++ - 无法使用 VeriFinger 保存处理过的指纹图像

python - 使用 ScikitLearn 的神经网络实现时出现的问题

android - Camera.Open 不打开相机

c - uEye 相机和 OpenCV 内存访问

c - 简单#define :d macro doesn't work in C

c - pthread_exit 和/或 pthread_join 导致中止和 SegFaults

C - n-ary 树的根未被保存/更新