如何在Android上将相机拍摄的新照片检索为OpenCV Mat?

时间:2015-03-18 18:27:24

标签: android opencv computer-vision opencv4android

我正在尝试使用Android设备拍照。必须将图片转换为Mat才能作为计算的输入,我希望在API中提供结果。

Android以哪种格式提供其回调中的byte []数据以及如何将其转换为颜色格式BGR中的OpenCV Mat?

第一个问题:"如何在没有SurfaceView的情况下拍摄照片"解决了。我使用了SurfaceTexture,它一定不可见。

mCamera = Camera.open();
mCamera.setPreviewTexture(new SurfaceTexture(10));

所以我能够开始预览并拍照。但是byte []数据的格式以及如何将其转换为OpenCV BGR Mat?

mCamera.startPreview();
mCamera.takePicture(null, null, null, new PictureCallback() {
            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
                Log.e(MainActivity.APP_ID, "picture-taken");
                android.hardware.Camera.Size pictureSize = camera.getParameters().getPictureSize();
                Mat mat = new Mat(new Size(pictureSize.width, pictureSize.height), CvType.CV_8U);
                mat.put(0,0,data);
                mat.reshape(0, pictureSize.height);
//              Imgproc.cvtColor(mat, mat, Imgproc.COLOR_YUV420sp2RGBA);
......

1 个答案:

答案 0 :(得分:-2)

正如tokan指出他在问题中的评论,这个解决方案很有效:

android.hardware.Camera.Size pictureSize = camera.getParameters().getPictureSize();

Mat mat = new Mat(new Size(pictureSize.width, pictureSize.height), CvType.CV_8U);
mat.put(0, 0, data);

Mat img = Imgcodecs.imdecode(mat, Imgcodecs.CV_LOAD_IMAGE_UNCHANGED);