【发布时间】:2015-01-08 12:56:58
【问题描述】:
使用 OpenCV,我需要使用 CascadeClassifier 的 runAt 方法来扫描图像的特定部分。
根据文档,我需要 setImage 才能使用此方法。
经过一番研究,我发现其他一些问题表明您需要创建一个继承 CascadeClassifier 的类,以便使用 setImage 和 runAt 方法,因为它们受到保护。
尝试此操作后,当我调用 setImage 时出现分段错误,我似乎无法找出正确的方法。
detect_multi 方法调用内置的 detectMultiScale 来检测正确数量的人脸,所以我知道基本类正在工作。但是,我尝试 setImage 以使用 runAt 的每一种方式,都会因分段错误而崩溃。
有什么建议吗?
这是我的代码:
class MyClassifier : public cv::CascadeClassifier {
public:
MyClassifier() {}
void set_image(cv::Mat &image) {
setImage(image);
}
void load_classifier(std::string file) {
load(file);
}
void detect_multi(cv::Mat &image) {
std::vector<cv::Rect> faces;
detectMultiScale(image, faces, 1.1, 2, 0| CV_HAAR_SCALE_IMAGE, cv::Size(30,30));
printf("Number detected: %zu\n", faces.size());
}
};
int main() {
cv::Mat image = cv::imread("GT.jpg", CV_8UC1);
MyClassifier face_cascade;
face_cascade.load_classifier("haarcascade_frontalface_default.xml");
face_cascade.detect_multi(image);
face_cascade.setImage(image);
return 0;
}
【问题讨论】: