使用cv :: CascadeClassifier :: detectMultiScale进行面部检测程序时,出现“致命信号7(SIGBUS)代码1,故障加法器”错误

时间:2019-02-01 01:03:28

标签: c++ opencv android-ndk

我正在尝试向相机应用添加简单的面部检测功能。 我尝试遵循示例(主要是官方示例),但是我得到了

  

A / libc:致命信号7(SIGBUS),代码1,tid中的故障地址0x

在Android本机类中使用cv::CascadeClassifier::detectMultiScale函数时出错。

我知道此错误是数据对齐问题。但是,我不知道是哪个特殊变量引起的。

我怀疑cv::CascadeClassifier::detectMultiScale的原因是因为当我注释掉它时,我没有得到错误。

我已经在网上搜索并尝试关闭OpenCL,将std::vector<cv::Rect>* faces = nullptr;清除为全局变量,或者我没有直接编写函数,而是直接在摄像机捕获循环中编写了函数。

我尝试过cv::resize(gray, gray)或为detectMultiScale函数调整参数,但是没有运气。

我注意到一件事,如果我将一个空的cv :: Mat对象传递给detectMultiScale,它不会给我一个错误(当然,它不会做任何事情,如果image为空,该函数可能会返回)

这是我的代码:

cv::CascadeClassifier face_cascade;
void *frameRetriever(void *p) {
    ...
    const std::string face_cascade_name = "</path/to/haarcascade_frontalface_alt.xml>";


  if( !face_cascade.load(face_cascade_name) ){
      LOGE("====> face_cascade not loaded");
  } else {
      LOGI("====> face_cascade loaded");
  }
  while (isCameraOpen) {
    ...
    detect_face(capturedMat);
    ...
    }
    ...

}

void detect_face(cv::Mat& src){
    cv::Mat gray;
    std::vector<cv::Rect>* faces;
    cv::cvtColor(src, gray, cv::COLOR_RGBA2GRAY);
    cv::equalizeHist(gray,gray);
    //gray.depth() is 0
    face_cascade.detectMultiScale(src, faces, 1.1, 2, 0, cv::Size(src.cols/10,src.rows/10));
    //commented out the loop that draws rectangle since the app crashes at face_cascade.detectMultiScale

    gray.release();
}

除了

之外,我没有其他错误提示
  

A / libc:致命信号7(SIGBUS),代码1,tid中的故障地址0x

如果我将detectMultiScale的第六个参数更改为默认值或类似cv::Size(30, 30)的内容,则会出现另一个Fatal signal 7错误。

任何人都不知道为什么会这样吗?

0 个答案:

没有答案