【发布时间】:2019-10-09 13:17:47
【问题描述】:
我正在尝试通过拍摄闪烁的 LED 来向手机发送数据。这在大多数情况下都可以正常工作,但是对于某些帧,我的相机预览中会出现滚动快门效果,这会扰乱我的数据传输。有没有办法消除这种卷帘效应?
我正在使用 Google 的 cameraAPI2 和 Nexus 6(但我在三星 S7 上看到了同样的效果)。我以 20 fps 的速度录制,LED 以 20 Hz 的频率闪烁。我的图像格式为 320x240,带有 YUV_420_888。 这是我当前的 CaptureRequest 设置:
CONTROL_AE_MODE CONTROL_AE_MODE_OFF
CONTROL_AWB_MODE CONTROL_AWB_MODE_OFF
EDGE_MODE EDGE_MODE_OFF
CONTROL_MODE CONTROL_MODE_OFF
SENSOR_EXPOSURE_TIME 500000
SENSOR_FRAME_DURATION 50000000
我已经尝试过使用曝光时间和帧持续时间,但没有效果。 只需打开相机应用程序并近距离拍摄 LED 即可观察到相同的效果。 Example
图片右半部分为旧框架,左半部分为新框架。
有没有办法解决这个问题? Android 有摄像头 vsync 吗?
编辑:我将频率更改为 20Hz。
编辑 2:我通过使用 opencv 对图像执行 Canny 边缘检测和标准霍夫线变换使其工作。从霍夫线变换中得到线坐标后,我检查了线是否水平。然后我沿着这条线分割图像,只使用较大的区域进行计算。
【问题讨论】:
-
从表面上看,您的 LED 比您的录音快两倍。应该反过来。将录制频率设置为 120 FPS。
标签: java android android-camera