我正在尝试向相机应用添加简单的面部检测功能。 我尝试遵循示例(主要是官方示例),但是我得到了
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
错误。
任何人都不知道为什么会这样吗?