Opencv4Android:如何与 C++ 一起使用

Posted

技术标签:

【中文标题】Opencv4Android:如何与 C++ 一起使用【英文标题】:Opencv4Android: How to use with C++ 【发布时间】:2013-10-02 17:13:48 【问题描述】:

我也在尝试构建一个使用 opencv for android 的示例。这是我的 C++ 代码:

头文件:

#ifdef __cplusplus
extern "C" 
#endif
#include "jni.h"
#include "opencv2/core/core.hpp"
namespace openCVFuncs
 
    cv::Mat contrastFilter(cv::Mat inputMatm, float contrastValue);

#ifdef __cplusplus

#endif

Cpp 文件:

namespace openCVFuncs

    cv::Mat contrastFilter(cv::Mat inputMat, float contrastValue)
    
        contrastValue = pow(2,contrastValue);
        cv::Mat outMat = inputMat.clone();
        uchar* data_img_in=(uchar*)inputMat.data;
        uchar* data_img_out=(uchar*)outMat.data;
        int temp = 0;
        for(int i=0;i<inputMat.size().height;i++)
            for(int j=0;j<inputMat.size().width;j++)
                for (int c=0;c<inputMat.channels();c++)
                
                   temp = (data_img_in+inputMat.step[0]*i)[j*inputMat.channels()+c];                       
                    temp = (int)((temp - 128.0) * contrastValue) +128;
                    if (temp < 5) temp = 5;
                    if (temp > 255) temp = 255;                       
                    (data_img_out+outMat.step[0]*i)[j*outMat.channels()+c]  = temp;
                
        return outMat;
    ;

我遇到了很多这样的错误:

/opt/android-ndk-r9/sources/cxx-stl/gnu-libstdc++/4.6/include/bits/valarray_before.h:652:3:错误:带有C链接的模板

我的代码有什么问题?

【问题讨论】:

【参考方案1】:

当使用“extern C”块时,您只能使用 C 可用的东西,这样就排除了函数重载/多态性、命名空间等。

在您发布的头文件中,您包含一个 .hpp 文件(可能包含其中一个不可用的定义)并定义一个命名空间。

这个页面提供了一些关于你可以做什么和不能做什么以及如何包装对 C++ 命名空间/重载函数的调用以在由 C 编译器编译的库中使用的主题的一些很好的指示,请参阅“从 C 中访问 C++ 代码来源”:

http://www.oracle.com/technetwork/articles/servers-storage-dev/mixingcandcpluspluscode-305840.html

【讨论】:

以上是关于Opencv4Android:如何与 C++ 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenCv4Android 中存储测试数据 [重复]

如何在 c++ 中将枚举与函数一起使用?

如何将 Lua FFI 与 C++ 函数一起使用

逗号运算符如何与 C++ 中的 cout 一起使用?

如何创建与 C++ 一起使用的离线数据库

如何编译多个 C++ 文件以将它们与 Python ctypes 一起使用?