当我想在sdcard JNI C ++中保存帧时,imwrite opencv函数总是返回false

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当我想在sdcard JNI C ++中保存帧时,imwrite opencv函数总是返回false相关的知识,希望对你有一定的参考价值。

我在android unsing JNI c ++中使用opencv,我想检测图像并使用opencv在c ++ imwrite()中提供的功能在android sdcard中保存检测到的面部但是当我编译所有事情成功但是当我执行app imwrite不起作用即使我在清单文件中使用权限(WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE),它也会返回false。我对英语中的任何错误感到抱歉,因为它不是我原来的语言。请帮忙请投票,因为这个项目对我来说非常重要

这是代码:

String human_cascade_name = "/storage/extSdCard/OpenCV/haarcascade_fullbody.xml";
CascadeClassifier human_cascade;

//-- 1. Load the cascades
      if( !human_cascade.load( human_cascade_name ) ){
      printf("--(!)Error loading
");
       return;
        }
std::vector<Rect> humans;
     Mat frame_gray;

     cvtColor( frame, frame_gray, CV_BGR2GRAY );
     equalizeHist( frame_gray, frame_gray );

     //-- Detect faces
     human_cascade.detectMultiScale( frame_gray, humans, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );
     stringstream ss;
     static int count=0;


     for(int i=0;i<humans.size();i++){


     //__android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "hhhhhhhhhhhhhhhh : %d ",humans[i].y);

     Point center( humans[i].x + humans[i].width*0.5, humans[i].y + humans[i].height*0.5 );
     ellipse( frame, center, Size( 2, 2), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );

     rectangle(frame,Point(humans[i].x,humans[i].y),Point(humans[i].x+humans[i].width,humans[i].y+humans[i].height), Scalar(0,255,0));

       }
       count+=1;
       ss << count;
       vector<int> compression_params;
       compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
       compression_params.push_back(9);
       if(imwrite("/storage/extSdCard/OpenCV/User1.jpg", frame)){
       __android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "yes");

       }else{
       __android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "no");

       };


      }
答案

您可以在adb shell或PC上的文件传输程序中看到sdcard的路径为/storage/extSdCard,但您的Android应用程序无法通过此路径访问。它应该使用getExternalStorageDirectory() API,如here所示。

以上是关于当我想在sdcard JNI C ++中保存帧时,imwrite opencv函数总是返回false的主要内容,如果未能解决你的问题,请参考以下文章

当我想在目标 c 项目中使用 swift 文件时使用未声明的标识符

当我想在 C++ Builder Starter 中链接静态库 TinyXML 2 的发布版本时,为啥会出现未解决的外部错误?

我想在我的第一个视图中保存带有日期和日期的假期列表。我们如何做到这一点?

我想在更改时保存表单,并使用 laravel 和 Jquery 创建一个动态表单

我可以从当前线程中保存一个值吗?

用于保存任何维数组的C ++变量