私のコードでこのエラーが発生しましたが、何が問題なのかわかりません。誰かが私に何が問題なのか説明できますか? ありがとうございました!
これはエラーコードです:
circleDetection.c:133: error: incompatible types in assignment of ‘IplImage*’ to ‘IplImage* [(((long unsigned int)(((long int)cnt) - 1)) + 1u)]’
これは、エラーが発生するファイルの一部です。
void mainCircleDetection( IplImage *src )
{
IplImage *img = cvCloneImage( src );
if( !img ){
printf("Image not loaded. EXITING...\n");
exit( -1 );
}
IplImage *singleChannel = getSingleChannel( img );
CvMemStorage *storage = cvCreateMemStorage(0);
CvSeq *circlesStorage = findCircles( singleChannel );
IplImage *imgCircles = drawCircles( img, circlesStorage );
cvNamedWindow( "Detected circles", 1 );
cvShowImage( "Detected circles", imgCircles );
cvWaitKey( 0 );
int cnt = circlesStorage->total;
IplImage *circlesROI[ cnt ];
circlesROI = getCircleROI( img, circlesStorage );
cvDestroyAllWindows();
}
エラーを与える行はこれです circlesROI = getCircleROI( img, circlesStorage );
これは、別の .c ファイルにある関数 getCircleROI です。
IplImage *getCircleROI( IplImage *src, CvSeq *circles){
IplImage *img = cvCloneImage( src );
int cnt = circles->total;
IplImage *circlesROI[ circles->total ];
for (int i = 0; i < cnt; i++)
{
float *p = (float *)cvGetSeqElem( circles, i );
CvPoint center = cvPoint( cvRound(p[0]), cvRound(p[1]) );
int radius = (int)cvRound( p[2] );
//void cvSetImageROI(IplImage* image, CvRect rect)
//inline CvRect cvRect( int x, int y, int width, int height );
cvSetImageROI( img, cvRect( center.x - radius, center.y - radius,
radius*2, radius*2) );
//IplImage *mask = cvCreateImage( cvSize(radius*2, radius*2), img->depth, 1 );
//cvZero( mask );
//cvDrawCircle( mask, cvPoint( radius, radius), radius, cvScalarAll( 255 ), CV_FILLED );
IplImage *res = cvCreateImage( cvGetSize(img), img->depth, 3);
IplImage *roi = getSingleChannel( res );
//prepare the ROI image
cvZero( roi );
cvZero( res );
//draw circle
cvCircle( roi, cvPoint( radius, radius), radius, cvScalarAll( 255 ), -1, 8, 0 );
//extract subimage
cvAnd( img, img, res, roi );
circlesROI[i] = cvCloneImage( res );
cvNamedWindow("res", 1);
cvShowImage("res", res);
cvWaitKey( 0 );
}
cvDestroyAllWindows();
cvReleaseImage( &img );
return circlesROI;
}