Je commence avec OpenCV et c'est l'API C, j'ai écrit ce programme de détection de visage mais il ne peut pas être exécuté, j'utilise OpenCV 2.4.9, voici mon Code:Programme OpenCV C++ utilisant l'API C cvClearMemStorage null Erreur de pointeur
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace cv;
using namespace std;
String faceCascade_name = "haarcascade_frontalface_default.xml";
char* name = "res";
CvHaarClassifierCascade* faceCascade;
CvMemStorage* storage = 0;
int detectAndDisplay(IplImage* frame);
int main(int argc, char** argv){
CvCapture* capture;
capture = cvCaptureFromCAM(CV_CAP_ANY);
faceCascade = (CvHaarClassifierCascade*)cvLoad(faceCascade_name.c_str());
IplImage* frame;
cvNamedWindow(name, 1);
if(!faceCascade){
printf("--(!)Error loading face cascade\n");
return -1;
}
if (!capture) {
printf("--(!)Error opening video capture\n");
return -1;
}
while(true){
frame = cvQueryFrame(capture);
detectAndDisplay(frame);
if(cvWaitKey(30) == 27){
break;
}
}
return 0;
}
int detectAndDisplay(IplImage* frame){
int scale = 1;
int i;
CvPoint pt1, pt2;
cvClearMemStorage(storage);
CvSeq* faces = cvHaarDetectObjects(&frame, faceCascade, storage, 1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/, cvSize(24, 24));
for(i = 0; i < (faces ? faces->total : 0); i++){
// Create a new rectangle for drawing the face
CvRect* r = (CvRect*)cvGetSeqElem(faces, i);
// Find the dimensions of the face,and scale it if necessary
pt1.x = r->x*scale;
pt2.x = (r->x+r->width)*scale;
pt1.y = r->y*scale;
pt2.y = (r->y+r->height)*scale;
// Draw the rectangle in the input image
cvRectangle(&frame, pt1, pt2, CV_RGB(255,0,0), 3);
}
cvShowImage(name, &frame);
return 0;
}
Mais, l'erreur suivante lorsque j'ai exécuté le programme compilé:
OpenCV Error: Null pointer() in cvClearMemStorage, file C:\builds\2_4_PackSlave-win32-vc12-shared\opencv\modules\core\src\datastructs.cpp
plz me dire comment le réparer, si vous avez plus de temps, plz terminer le programme pour moi!
Commencez par ne pas utiliser des variables globales. Répétez 471 fois: "Ce problème a été causé par mon utilisation de variables globales, ce que je ne ferai plus jamais." –
Avez-vous manqué d'appeler 'cvCreateMemStorage' pour' storage' en premier? – P0W
Désolé, la suggestion de POW a fait une autre erreur, mauvais drapeau (paramètre ou champ de structure) (type de tableau non reconnu ou non supporté) – Cro