java - 使用 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 文件的方式,但我不知道该怎么做。有没有简单的方法来做到这一点?
解决方案
从您的 getOutputMediaFile() 方法获取文件的对象并使用上面的命令。
文件.getAbsolutePath()
在您的 imread 方法中传递此返回
推荐阅读
- raku - 在不显式导出的情况下获取模块的 Pod
- ruby - 如何让我的 AWS Lambda 访问存储在供应商/捆绑包中的 gem?
- ember.js - 如何在 ember-cli-build.js 中根据环境配置 ember-cli-babel?
- android - tensorflow lite 问题:输出标签文件大小是固定的??android中的输出或输入张量维度不匹配问题
- netlogo - 在 NetLogo 中创建随机生成值列表
- node.js - 赋值给常量变量
- c# - 如何使用 FrontChannelLogout 从外部 IdentityServer4 注销 IdentityServer4-client
- php - Google Firestore 请求的身份验证范围不足
- c++ - (c++)输入需要是单个字符,但它接受多个字符并检查第一个字母
- javascript - 在 Javascript 中提取特定的 XML 属性