【发布时间】:2015-07-11 20:53:31
【问题描述】:
我有一个两阶段的应用程序,我需要两组分辨率:
第一阶段
在框架内搜索已知模板\ QR 标记。 为此,我需要至少 640X480 的帧大小。
第二阶段
找到模板 \ QR 标记后,我需要更改为较低的分辨率 (320X240),以便为时间敏感的任务获得最佳帧速率。
我的问题
在启动时 (onCameraViewStarted) 我可以将分辨率设置为 640X480,但之后我无法从 onCameraFrame 中更改它(我从 onCameraFrame 中找到模板 \ QR 标记)。 从我做的一些调试来看,setResolution 方法(如 OpenCV tutorial3 中所见)实现的 disconnectCamera() 似乎卡在等待主线程完成。尝试在使用新线程或通过实现事件侦听器时更改分辨率也没有成功。
关于如何更改两个阶段之间的分辨率的任何想法?
谢谢
代码:
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
inFrame = inputFrame.gray();
if (locateTemplate(inFrame)) {
setResolution(WORK_RESOLUTION);
resetGridData(WORK_RESOLUTION);
}
return inFrame;
}
/**
* Sets a new resolution for camera frames
* @param size - the new resolution size
*/
private void setResolution (Size size) {
ListIterator<Camera.Size> iterator = cameraView.getResolutionList().listIterator();
Camera.Size s;
while (iterator.hasNext()) {
s = iterator.next();
if (s.width == size.width && s.height == size.height) {
Log.i(TAG, "Setting resolution to: " + s.width + "X" + s.height);
cameraView.setResolution(s);
}
}
}
【问题讨论】:
标签: android opencv resolution