2

在 android 中捕获图像并使用 opencv 处理它们的最佳方法是什么?我应该像这里一样使用表面视图,还是应该像在 opencv 示例中一样使用 opencv 相机?以及如何加载捕获的图像并将其转换为 Mat?提前致谢

 private PictureCallback mPicture = new PictureCallback() {

        @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
        if (pictureFile == null) {
            Log.d("E",
                    "Error creating media file, check storage permissions ");
            return;
        }

        try {

            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.close();
            //processImage();
        } catch (FileNotFoundException e) {
            Log.d("E", "File not found: " + e.getMessage());
        } catch (IOException e) {
            Log.d("E", "Error accessing file: " + e.getMessage());
        }
    }
4

1 回答 1

8

在 OpenCV 示例中有一个 CameraBridgeViewBase,它有助于捕获、处理和显示相机预览的结果(低分辨率图像的连续流)。

如果您想以更高的分辨率处理单个捕获,您应该使用类似于 onPictureTaken() 的东西。然后您可以使用Highgui.imread()读取图像并进行处理。

您还可以通过使用BitmapFactory.decodeByteArray()从数据数组创建位图,然后使用Utils.bitmapToMat()将位图转换为 Mat 来避免写入和读取文件

于 2013-10-07T21:12:25.473 回答