2011-10-10 2 views
1

Je ne sais pas ce qui s'est passé car il fonctionnait grand il y a quelques jours mais maintenant je reçois une erreur concernant un identificateur null non annulé dans la méthode detectcircle(). if(p==null){return;} Je ne sais pas ce qui se passe.null identificateur non déclaré Erreur

#include <stdio.h> 
    #include "cv.h" 
    #include "highgui.h" 
    #include <iostream> 
    #include <math.h> 
    #include <string.h> 
    #include <conio.h> 

using namespace std; 

IplImage* img = 0; 
CvMemStorage * cstorage; 
CvMemStorage * hstorage; 

void detectCircle(IplImage *frame); 


int main(int argc, char **argv) 
{ 
    CvCapture *capture = 0; 
    IplImage *frame = 0; 
    int  key = 0; 

    hstorage = cvCreateMemStorage(0); 
    cstorage = cvCreateMemStorage(0); 

    //CvVideoWriter *writer = 0; 
    //int colour = 1; 
    //int fps = 25; 
    //int frameW = 640; 
    //int frameH = 480; 
    //writer = cvCreateVideoWriter("test.avi",CV_FOURCC('P', 'I', 'M', '1'),fps,cvSize(frameW,frameH),colour); 

    //initialise camera 
    capture = cvCaptureFromCAM(0); 

    //check if camera present 
    if (!capture) 
    { 
     fprintf(stderr, "cannot open webcam\n"); 
     return 1; 
    } 

    //create a window 
    cvNamedWindow("Snooker", CV_WINDOW_AUTOSIZE); 

    while(key !='q') 
    { 

    //get frame 
     frame = cvQueryFrame(capture); 
     //int nFrames = 50; 
     //for (int i=0; i<nFrames;i++){ 
      //cvGrabFrame(capture); 
      //frame = cvRetrieveFrame(capture); 
      //cvWriteFrame(writer, frame); 
     //} 

    //check for frame 
     if(!frame) break; 

     detectCircle(frame); 


    //display current frame 
     //cvShowImage ("Snooker", frame); 

     //exit if Q pressed 
     key = cvWaitKey(20); 

    } 
    // free memory 
    cvDestroyWindow("Snooker"); 
    cvReleaseCapture(&capture); 
    cvReleaseMemStorage(&cstorage); 
    cvReleaseMemStorage(&hstorage); 
    //cvReleaseVideoWriter(&writer); 

    return 0; 
} 
void detectCircle(IplImage * img) 
{ 
    int edge_thresh = 1; 
    IplImage *gray = cvCreateImage(cvSize(img->width,img->height), 8, 1); 
    IplImage *edge = cvCreateImage(cvSize(img->width,img->height), 8, 1); 

    cvCvtColor(img, gray, CV_BGR2GRAY); 

    gray->origin = 1; 

    // color threshold 
    cvThreshold(gray,gray,100,255,CV_THRESH_BINARY);  

    // smooths out image 
    cvSmooth(gray, gray, CV_GAUSSIAN, 11, 11); 

    // get edges 
    cvCanny(gray, edge, (float)edge_thresh, (float)edge_thresh*3, 5); 

    // detects circle 
    CvSeq* circle = cvHoughCircles(edge, cstorage, CV_HOUGH_GRADIENT, 1, 
     edge->height/50, 5, 35); 

    // draws circle and its centerpoint 
    float* p = (float*)cvGetSeqElem(circle, 0); 
    if(p==null){ return;} 

    cvCircle(img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(255,0,0), -1, 8, 0); 
    cvCircle(img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(200,0,0), 1, 8, 0); 

    cvShowImage ("Snooker", img); 
} 
+0

Quelle langue est-ce censé être, C ou C++? – Staven

Répondre

4

Remplacer null par NULL. NULL est une macro définie par l'implémentation qui représente la constante du pointeur nul (18.1.4 dans le standard). Habituellement, c'est:

#define NULL 0 
0

Il est si longtemps que je devais programmer en C que je devais regarder ça, mais je pense que vous voulez dire NULL.

Il prend "null" comme une variable non déclarée.

+0

ya, des idées comment y remédier? – user966890

+2

Je pense que je vous ai dit comment y remédier. –

0

sensible à la casse, NULL au lieu de null, n'est ce pas?

+0

oui. Merci. trop évident c'était – user966890

+0

@ user966890, Si c'était trop évident, pourquoi ne pourriez-vous pas le comprendre vous-même? –

Questions connexes