使用 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
我是一个绝对的初学者,目前正在 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