我正在开发一个使用本机开发的应用程序,它需要我使用opencv进行一些图像分析。问题是我需要在分析后使用imwrite函数保存图像,该函数不起作用。
我已经检出了这篇文章:What is an undefined reference/unresolved external symbol error and how do I fix it?-但它没有回答我的问题。我知道imread函数正在运行,它与imwrite函数位于同一标头中。上述帖子中描述的所有问题似乎都无法解决此问题。
每当我尝试使用imwrite编译代码时,都会出现此错误:
C:\Users\User\Desktop\App\android\app\src\main\cpp/native-lib.cpp:82: error: undefined reference to 'cv::imwrite(cv::String const&, cv::_InputArray const&, std::__ndk1::vector<int, std::__ndk1::allocator<int> > const&)'
我正在使用最新版本的opencv(3.4.1),并已使用
#include <opencv2/opencv.hpp>
这是使用JNI的c ++部分,只是试图将图像保存为灰度。
extern "C"
{
void JNICALL Java_com_astapp_ImageConvert_OpencvNativeClass_invertImage(JNIEnv *env, jobject instance,
jstring filePath, jstring invertedFilePath) {
const char *filePathStr = env->GetStringUTFChars(filePath, 0);
const char *invertedFilePathStr = env->GetStringUTFChars(invertedFilePath, 0);
// get photo with path
Mat image = imread( filePathStr , IMREAD_GRAYSCALE);
imwrite(invertedFilePathStr,image);
获取绝对路径
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
//make path of photo with gallery path
String imageName;
int index = imagePath.lastIndexOf("/");
imageName = imagePath.substring(index+1, imagePath.length()-4);
String filePath = dir.getAbsolutePath() + "/" + imageName + ".jpg";
//make path of inverted photo
String invertedFilePath = dir.getAbsolutePath() + "/" + imageName + "_inverted.jpg";