【问题标题】:OpenCV and C++: "Can't resolve variable 'Mat`"OpenCV 和 C++:“无法解析变量 'Mat`”
【发布时间】:2020-02-25 19:24:00
【问题描述】:

我正在尝试使用 C++ 语言将 OpenCV 集成到 Android Java 本机界面中。我已将 OpenCV 放在 jni 文件夹中,我正在其中编写 C++ 代码。我在 HelloNative.c 文件中包含了 Opencv 头文件。但是我在尝试访问 Mat 对象时仍然遇到此错误。 “Can't resolve variable Mat”。

我尝试过using namespace cv,但预先声明usingnamespace 会出错;这不是一个解决方案。我在下面发布我的代码,请有人看看它,让我知道我做错了什么。

#include <string.h>
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
#include <android/log.h>
#include <malloc.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <OpenCV/include/opencv2/opencv.hpp>
#include <OpenCV/include/opencv/cv.h>
#include <OpenCV/modules/core/include/opencv2/core.hpp>
#include <OpenCV/modules/core/include/opencv2/core/core_c.h>
#include <OpenCV/modules/core/include/opencv2/core/mat.hpp>
#include <OpenCV/modules/imgproc/include/opencv2/imgproc/imgproc.hpp>
#include <OpenCV/modules/imgproc/include/opencv2/imgproc/imgproc_c.h>
#include <OpenCV/modules/legacy/include/opencv2/legacy/legacy.hpp>
#include <OpenCV/modules/videostab/include/opencv2/videostab/motion_stabilizing.hpp>
#include <OpenCV/modules/videostab/include/opencv2/videostab/global_motion.hpp>

JNIEXPORT jint JNICALL
Java_com_example_soimporttest_MainActivity_getStringFromJNI(JNIEnv *env, jobject thisObj,
                                                            jstring imagepath) {
    const char *jnamestr = (*env)->GetStringUTFChars(env, imagepath, 0);
    int width, height, gray;
    FILE *fp = fopen(jnamestr, "rb");
    if (fp) {
        //Read .pgm file
        int scan = fscanf(fp, "P5%d%d%d", &width, &height, &gray);
        if (scan != 3 || &gray > 256 || &width > 0xfffff || &height > 0xfffff || &gray <= 1 ||
            &width < 32 || &height < 32) {
            fclose(fp);
            return 9;
        } else {
            return 0;
        }

    } else {
        return -1;
    }
}

JNIEXPORT void JNICALL
Java_com_example_soimporttest_MainActivity_displayImage(JNIEnv *env, jobject thisObj, jclass type, jlong inpAddr, jlong outAddr) {
    ::Mat &src = *(Mat*)inpAddr;
    Mat &dst = *(Mat*)outAddr;
    applyFilter(src , dst);
}

这个文件中有两个函数,第一个函数getStringFromJNI 运行良好。 谢谢。

【问题讨论】:

  • 你好。请告诉我们你是如何编译文件的。你在做 C 还是 C++?这些语言相同。
  • 我正在使用ndk-build 编译它。我应该将 C 用于 JNI,但 openCV 集成在 C++ 中。所以我在一个文件中混合了两种语言。如果你能帮我找到,如何在 C 或 jni 中集成 opencv;这将是最好的。
  • 你不能用cv::Mat替换你C++代码中每次使用的Mat吗?
  • 另外,“预声明 using 和命名空间时出错” 不是很清楚。 确切的错误信息是什么?
  • 这是一个 tutorial 我用 Android 设置原生 OpenCV,希望对您有所帮助!

标签: android c++ opencv java-native-interface


【解决方案1】:

经过大量研究,我终于设法为我的问题找到了一个好的解决方案。请按照以下提到的教程进行操作: https://github.com/leadrien/opencv_native_androidstudio 在集成时您将面临一些问题。您可以在 cmets 中发布这些解决方案,我将指导您完成每一个。 谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 2012-04-14
    • 1970-01-01
    • 2020-01-17
    • 2021-12-17
    相关资源
    最近更新 更多