【问题标题】:openCV: is it possible to time cvQueryFrame to synchronize with a projector?openCV:是否可以定时 cvQueryFrame 与投影仪同步?
【发布时间】:2011-08-15 23:44:51
【问题描述】:

当我使用 openCV 通过 'cvQueryFrame' 捕获投影图案的相机图像时,我经常会得到一个意想不到的伪像:投影仪的扫描线。也就是说,由于我无法精确计时“cvQueryFrame”捕获图像的时间,因此拍摄的图像不尊重投影仪的恒定 30Hz 刷新。结果是那些将摄像机转向电视屏幕的人所熟悉的典型水平带。

没有求助于硬件同步,有没有人在 openCV 中通过近似(例如,“足够好”)非正式的投影仪-相机同步取得了一些成功?

以下是我正在考虑的两个解决方案,但希望这是一个足够常见的问题,可能存在一个优雅的解决方案。我不太优雅的想法是:

  • 在显示视频的 cvWindow 中添加一个滑块控件,供用户控制从 0 到 1/30 秒的时间偏移,然后在此间隔设置一个队列计时器。每当需要一个帧时,而不是直接调用'cvQueryFrame',我会请求回调以在下次触发计时器时执行'cvQueryFrame'。这样,理论上用户可以使用滑块来减少扫描线伪影,前提是定时器分辨率足够。

  • 通过“cvQueryFrame”接收帧后,通过查找垂直像素列的 HSV 值中的增量来检查帧的水平带。当然,这只有在被拍摄对象在平滑变化的光线下包含均匀颜色的基准条时才有效。

我用过几台带有 OpenCV 的相机,最近是佳能 SLR (7D)。

【问题讨论】:

    标签: opencv camera sync projector


    【解决方案1】:

    我知道这与同步无关,但是您是否尝试过延长曝光时间?还是故意将两张或多张图片“混合”成一张?

    【讨论】:

      【解决方案2】:

      我认为您提出的解决方案不会奏效。 cvQueryFrame 基本上从相机驱动程序的缓冲区复制下一个可用帧(或根据您的驱动程序实现在内存映射区域或 blah 中推进一个指针)。

      在任何情况下,调用 cvQueryFrame 的时间都不会影响捕获图像的时间。

      因此,正如您所建议的,硬件同步确实是唯一的途径,除非您有一个特殊的相机,例如点灰色相机,它可以让您对帧集成开始触发器进行明确的软件控制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多