使用 OpenCV 在 Android Studio 应用程序中获取 jpg 文件的路径以制作垫子

Getting the path of a jpg file to make a Mat in Android Studio app using OpenCV

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

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

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);

虽然我不知道如何以 "smart" 的方式获取我的 jpg 的路径。我可以按照它在我的 phone 上的方式插入它的实际路径来代替 ???,但我很确定它对于不同的 phone 可能会有所不同。我考虑过稍微改变它并做一些类似于它对 mediaStorageDir 文件所做的事情,但我不知道如何做。有简单的方法吗?

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

file.getAbsolutePath()

在你的 imread 方法中传递这个 return