android.hardware.camera2.CaptureRequest可以与OpenCV一起使用吗? [英] Can an android.hardware.camera2.CaptureRequest be used with OpenCV?
问题描述
我已经为此工作了几天.我有一个基于OpenCV/JavaCameraView的项目,我试图与一个我用来控制相机对光的敏感度的Android android.hardware.camera2.CaptureRequest
对象集成.
I've worked on this for days now. I have an OpenCV/JavaCameraView-based project I am trying to integrate with an Android android.hardware.camera2.CaptureRequest
object I use to control the camera's sensitivity to light.
CameraBridgeViewBase.CvCameraViewListener2/JavaCameraView
项目有效(我可以在屏幕上看到图像),而 CaptureRequest
项目有效(也可以看到),但是结合了单个项目中的两种技术已被证明是一个大问题.
The CameraBridgeViewBase.CvCameraViewListener2/JavaCameraView
project works (I can see an image on the screen), and the CaptureRequest
project works (see this, too), but combining the two technologies in a single project has proved a big problem.
有人将这两种技术结合在一起吗?我的目标是使相机在CaptureRequest(受限制的SENSOR_SENSITIVITY + SENSOR_EXPOSURE_TIME)的控制下,但要让屏幕显示通过我编写的OpenCV共享库过滤的流图像.
Has anyone gotten these two technologies to work together? My goal is to have the camera under the control of the CaptureRequest (limited SENSOR_SENSITIVITY + SENSOR_EXPOSURE_TIME), but for the screen to show a streaming image filtered through an OpenCV shared library I've written.
要控制相机,我可以使用类似以下的方法:
To control the camera, I can use something like this:
mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
// The camera is already closed
if (null == mCameraDevice) {
return;
}
long exposureTime = 66259688,frameDuration = 1000;
int sensitivity = 1512;
mCaptureSession = cameraCaptureSession;
try {
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
setAutoFlash(mPreviewRequestBuilder);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
mPreviewRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, Long.valueOf(exposureTime));
mPreviewRequestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, Integer.valueOf(sensitivity));
mPreviewRequestBuilder.set(CaptureRequest.SENSOR_FRAME_DURATION, Long.valueOf(frameDuration));
mPreviewRequest = mPreviewRequestBuilder.build();
mCaptureSession.setRepeatingRequest(mPreviewRequest,
mCaptureCallback, mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
}
要过滤图像流,我可以使用以下内容:
To filter the image stream, I can use something like this:
public class MyCoolScanner extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {
...
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
OpenCVNative.myCoolLibrary(mRgba.getNativeObjAddr(),mGray.getNativeObjAddr());
return mGray;
}
先谢谢了.
推荐答案
请找到使用Android实现开放式简历的实现,这可能会对您有所帮助.
Please find implementation of open CV with Android , it may help you .
相机校准-opencv 2.3.1 android
Camera calibration - opencv 2.3.1 android
https://groups.google.com/forum/#!topic/android-opencv/xXtUvdA1E4M
https://fossies.org/dox/opencv-3.2.0/CameraCalibrationActivity_8java_source.html
这篇关于android.hardware.camera2.CaptureRequest可以与OpenCV一起使用吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!