我不知道發生了什麼,因爲這是前幾天運行的宏,但現在我得到關於detectcircle()
方法中的undelcared null標識符的錯誤。 if(p==null){return;}
我不知道發生了什麼事。null未聲明的標識符錯誤
#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);
}
這應該是什麼語言,C或C++? – Staven