Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分配中的OpenCV不兼容类型_C_Opencv_Iplimage - Fatal编程技术网

分配中的OpenCV不兼容类型

分配中的OpenCV不兼容类型,c,opencv,iplimage,C,Opencv,Iplimage,我的代码给了我这个错误,我不明白是什么问题。 有人能给我解释一下问题是什么吗?谢谢大家! 这是错误代码: circleDetection.c:133: error: incompatible types in assignment of ‘IplImage*’ to ‘IplImage* [(((long unsigned int)(((long int)cnt) - 1)) + 1u)]’ 这是给出错误的文件的一部分: void mainCircleDetection( IplImage *

我的代码给了我这个错误,我不明白是什么问题。 有人能给我解释一下问题是什么吗?谢谢大家!

这是错误代码:

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,circlestorage)

这是另一个.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;
}
IplImage*getCircleROI(IplImage*src,CvSeq*圆圈){
IplImage*img=cvCloneImage(src);
int cnt=圆圈->总计;
IplImage*圆圈ROI[圆圈->总计];
对于(int i=0;idepth,1);
//cvZero(掩模);
//cvDrawCircle(遮罩,cvPoint(半径,半径),半径,cvScalarAll(255),CV_填充);
IplImage*res=cvCreateImage(cvGetSize(img),img->depth,3);
IplImage*roi=getSingleChannel(分辨率);
//准备ROI图像
cvZero(roi);
cvZero(res);
//画圈
cvCircle(roi,cvPoint(半径,半径),半径,cvScalarAll(255),-1,8,0);
//提取子图像
cvAnd(img、img、res、roi);
圆形ROI[i]=CVCloneImages(res);
cvNamedWindow(“res”,1);
cvShowImage(“res”,res);
cvWaitKey(0);
}
cvallwindows();
cvReleaseImage(&img);
返回圈ROI;
}

circlesROI[i]=getCircleROI(img,circlestorage)<代码>IplImage*圆形ROI[cnt]将
circlesROI
声明为
cnt
类型
IPLImage*
的元素数组。您尝试将
IplImage*
分配给它。除了数组根本不可赋值之外,这是错误的类型。@DanielFischer我也有同样的印象。我不熟悉IplImages,所以我的建议仍然有效吗?@Shark是和否。它将修复该类型错误。但是看看
getCircleROI
的代码,a)返回一个
IplImage**
,b)这是一个局部变量的地址。所以这种破碎超出了我们评论的范围。@DanielFischer是的,一想到我就“害怕”我把他带进了一个更深的兔子洞。。。但它看起来像是要编译的:)哦,很高兴我能帮上忙。