首页 > 解决方案 > 使用 OpenCV 在 Android Studio 应用程序中获取 jpg 文件的路径以制作 Mat

问题描述

我是一个绝对的初学者,目前正在 Android Studio 中制作应用程序。我希望它能够拍摄条形码的照片,保存它,使用 OpenCV 对其进行一些图像处理,然后使用 Zxing 对其进行解码。

这是应该完成所有这些的活动的代码(到目前为止):

public class Scan extends AppCompatActivity {

    private Uri file;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan);
        openCamera();
    }

    public void openCamera(){
        Intent intent_Camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        file = Uri.fromFile(getOutputMediaFile());
        intent_Camera.putExtra(MediaStore.EXTRA_OUTPUT, file);
        startActivityForResult(intent_Camera, 100);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 100) {
            if (resultCode == RESULT_CANCELED) {
                finish();
            }
        }
    }

    private static File getOutputMediaFile(){
        File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES), "MyApp");

        if (!mediaStorageDir.exists()){
            if (!mediaStorageDir.mkdirs()){
                return null;
            }
        }

        return new File(mediaStorageDir.getPath() + File.separator +
                "TEMP" + ".jpg");                                                        
    }

接下来我想添加一个方法,从 jpg 文件中创建一个 Mat 然后做一些其他的事情,到目前为止它看起来像这样:

public static String decodePic(){
        Imgcodecs imageCodecs = new Imgcodecs();
        String file ="???";
        Mat matPic = imageCodecs.imread(file);

我不知道如何以“智能”方式获取我的 jpg 路径。我可以按照手机上的方式插入它的实际路径来代替???的位置,但我很确定它对于不同的手机可能会有所不同。我考虑过对其进行一些更改并做一些类似于使用 mediaStorageDir 文件的方式,但我不知道该怎么做。有没有简单的方法来做到这一点?

标签: javaandroidopencvpathjpeg

解决方案


从您的 getOutputMediaFile() 方法获取文件的对象并使用上面的命令。

文件.getAbsolutePath()

在您的 imread 方法中传递此返回


推荐阅读