null未声明标识符错误

时间:2011-10-10 14:20:44

标签: compiler-errors null computer-vision

我不知道发生了什么,因为几天前它正在运行,但现在我在detectcircle()方法中得到一个关于未查找的空标识符的错误。 if(p==null){return;}我不知道发生了什么。

 #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 );
}

3 个答案:

答案 0 :(得分:4)

null替换为NULLNULL是一个实现定义的宏,表示空指针常量(标准中为18.1.4)。通常,它是:

#define NULL 0

答案 1 :(得分:0)

由于我不得不在C中编程,所以我必须查看它,但我认为你的意思是NULL

将“null”视为未声明的变量。

答案 2 :(得分:0)

区分大小写,NULL而不是null,不是吗?