2011-04-30 68 views
1

当我通过'cvQueryFrame'使用openCV捕捉投影图案的照相机图像时,我经常会得到一个意想不到的工件:投影机的扫描线。也就是说,由于“cvQueryFrame”捕获图像时我无法精确计时,因此拍摄的图像并不考虑投影机的恒定30Hz刷新。其结果是那些将视频摄像机转向电视屏幕的人所熟悉的典型水平频带。openCV:是否有可能使cvQueryFrame与投影仪同步?

短诉诸硬件同步的,有没有人曾在OpenCV的一些成功的近似(例如,“足够好”)非正式投影器相机同步?

下面是两个解决方案我正在考虑,但希望这是一个很好的解决方案可能存在一个共同的问题不够。我的低于优雅的想法是:

  • 在cvWindow添加的滑块控制显示视频的用户控制的定时从0偏移1 /第30秒,然后设置队列定时器在此间隔。无论何时需要帧,我都会请求一个回调函数在下一次触发定时器时执行'cvQueryFrame'。通过这种方式,理论上用户可以使用滑块来减少扫描线伪影,只要定时器分辨率足够。

  • 在通过'cvQueryFrame'接收到一个帧后,通过查找像素垂直列的HSV值中的增量来检查该告警水平带的帧。当然,这只有在拍摄对象在平稳变化的照明条件下包含均匀颜色的基准条时才起作用。

我已经使用了几款相机与OpenCV,最近一个佳能单反相机(7D)。

回答

1

我知道这有没有关系,但同步,你尝试过延长曝光时间?或者通过故意将两个或更多图像“混合”成一个?

2

我不认为你提出的解决方案会奏效。 cvQueryFrame基本上从摄像头驱动程序的缓冲区拷贝下一个可用帧(或根据驱动程序实现在存储器映射区域中前进指针或blah)。

在任何情况下,cvQueryFrame呼叫的定时具有当图像被捕获没有影响。

所以,如你所说,硬件同步真的是唯一的出路,除非你有特殊的摄像头,像一个点灰色的摄像头,它给你的框架整合开始触发的明确的软件控制。