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

缺少求助于硬件同步的人,有没有人在openCV中实现近似(例如“足够好”)非正式的投影机-摄像机同步而取得成功?

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

  • 在cvWindow中添加一个滑块控件以显示视频,以供用户控制从0到1/30秒的时间偏移,然后以该间隔设置队列计时器。每当需要一个框架时,我都会请求回调以在计时器的下一次触发时执行“cvQueryFrame”,而不是直接调用“cvQueryFrame”。这样,理论上讲,只要定时器分辨率足够,用户就可以使用滑块来减少扫描线伪影。
  • 通过“cvQueryFrame”接收到帧后,通过查找像素垂直列的HSV值增量来检查该帧是否处于讲故事水平带。自然,这仅在被摄对象在平滑变化的光线下包含均匀颜色的基准条时才有效。

  • 我在OpenCV上使用了几台相机,最近使用的是佳能SLR(7D)。

    最佳答案

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

    无论如何,cvQueryFrame调用的时间对捕获图像的时间没有影响。

    因此,正如您所建议的那样,硬件同步实际上是唯一的途径,除非您拥有特殊的摄像头(如点式灰度摄像头),它可以使您对帧集成开始触发器进行明确的软件控制。

    10-08 09:23