java - imread 没有从 Linux 读取 Java Android 上的现有图像

标签 java android opencv android-emulator imread

package com.example.cppinandroid;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import org.opencv.core.Mat;
import java.io.File;
import static org.opencv.imgcodecs.Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE;
import org.opencv.imgcodecs.Imgcodecs;

public class MainActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = findViewById( R.id.sample_text );

        Mat image;
        image = Imgcodecs.imread( "/home/<myName>/a.png", CV_LOAD_IMAGE_GRAYSCALE);
        if ( image.size().height > 0 )
        {
            tv.setText( "No datfa in image!");
        }
        else
        {
            tv.setText( "xxff " + image.size().height);
        }
    }
}

我没有使用任何可绘制或外部媒体。图像存在于主文件夹中,可以通过提供完全相同的路径由普通的 opencv c++ 程序打开。

Someone here told me that native C++ NDK will not be able to read Linux paths .好吧。这里全是Java。

当我执行它时,它总是进入 else 语句并将高度显示为 0.0

我已经删除了多余的代码。

在 Linux 上这个程序从主文件夹读取普通 png 的方法是什么?

最佳答案

所有 Android 设备或模拟器都无法访问外部存储,例如您的 Linux 存储分区,它们可以访问其内部存储或 SD 卡。在模拟器的情况下,它们的内部存储是使用不易读取的特定格式的文件来模拟的。在启用了开发人员选项的模拟器或设备中,可以使用 adb在 Android SDK 中找到的命令 platform-tools将文件传输到其中的文件夹:

adb push file.jpg /sdcard/file.jpg

之后,您需要更改您在代码中使用的文件的路径以匹配并启用 READ_EXTERNAL_STORAGE 的权限(这里的外部意味着您正在运行的应用程序外部,但仍然在设备内部)。

Someone here told me that native C++ NDK will not be able to read Linux paths. Alright. Here it is all Java.

查看您的问题和答案,首先这是同一个问题,试图访问不属于设备/模拟器内部存储的文件。然而答案并不完全正确,只要授予应用程序权限,C/C++ 代码就可以访问内部存储的文件和目录。我建议您首先尝试使用 Java 解决问题,然后切换回您在其他问题中使用的代码,但路径已更正。使用 Java,您将为 OpenCV API 使用 Java 包装器,因此您需要调用 OpenCVLoader.initDebug()加载包装库。使用纯 NDK 时,您只需加载已编译的库(您使用 native C/C++ 代码创建的 System.loadLibrary(<libname>)

关于java - imread 没有从 Linux 读取 Java Android 上的现有图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61725184/

相关文章:

java - 为什么我在使用增强型 for 循环时会在该程序中出现空指针异常

java - 有没有办法在 Android Studio 中标记 TODO 完成?

android - 实现类似 NYTimes 的部分 "Up"导航

python - 将 openCV-python 自适应阈值应用于 3D tiff

python - 如何转换图像以使投影图像与原始图像相同

java - REST API 的响应以及请求执行期间生成的日志

java - “找不到符号”或“无法解析符号”错误是什么意思?

java - -bash : ./deploy.sh : Permission denied , 错误:脚本返回退出代码 126

android - 如何从 TextView 上的 OnClick 事件在浏览器中启动 URL?

python - 为 OCR 拆分多列图像