0

我在一个线程上编写了这个用于面部检测的代码,然后我将编写用于眼睛、鼻子和嘴巴的代码。

但是有一个错误是'threadface_func' : undeclared identifier---

我找不到它是什么。

    #include <iostream>
    #include "cv.h"
    #include "highgui.h"
    #include <pthread.h>

    typedef struct parameter_t{
        CvSeq * detectRect_face;
        IplImage* capturedImg;
        CvHaarClassifierCascade * pCascade_face;
        CvMemStorage * storage;


    }parameter_t;

    int main ( int argc, const char* argv[] )
    {
            CvCapture* capture = cvCaptureFromCAM(0);
            IplImage* capturedImg;
            int resCount = 1;
            char path[50];
            int flags = CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH;

            CvHaarClassifierCascade * pCascade_face;
            pthread_t threadface;


            pCascade_face = (CvHaarClassifierCascade *)cvLoad("C:/Users/Furkan/Desktop/Computer Vision/Programlar/opencv/data/haarcascades/haarcascade_frontalface_alt.xml");
            cvNamedWindow("FaceDetection");

            while (true)
            {
                CvMemStorage * storage;
                CvSeq * detectRect_face;
                capturedImg = cvQueryFrame(capture);
                storage = cvCreateMemStorage(0);

                parameter_t my_parameters;

                int k=pthread_create(&threadface,0,threadface_func,(void*)&my_parameters);

                if(k!=0)
                {
                    printf("Create thread failed! error");
                    return 1;
                }


                cvShowImage("FaceDetection", capturedImg);

                int ch = cvWaitKey(1);

                if(ch==27)
                    break;
                else 
                    if(ch == 115)
                    {
                        sprintf(path,"d:/resim%d.bmp",resCount++);
                        cvSaveImage(path,capturedImg,0);
                    }
            }

        cvDestroyWindow("FaceDetection");

        cvReleaseCapture(&capture);

        return 0;
    }


    void* threadface_func(void* parameter){


        parameter_t *p =(parameter_t*)parameter;

        p->detectRect_face=cvHaarDetectObjects(p->capturedImg,p->pCascade_face,p->storage,1.15, 3, 0,cvSize(25, 15));

        for(int i=0;i<(p->detectRect_face ? p->detectRect_face->total:0); i++ )
            {
                CvRect* r = (CvRect*)cvGetSeqElem(p->detectRect_face, i); 
                CvPoint pt1 = { r->x, r->y }; 
                CvPoint pt2 = { r->x + r->width, r->y + r->height }; 
                cvRectangle(p->capturedImg, pt1, pt2, CV_RGB(255,0,0), 1,8, 0); 

            }

        return 0;
    }

请帮忙...

4

1 回答 1

3

在 C 中,函数必须在引用它们的位置之前声明。threadface_func您在 中间引用该函数main(),因此您必须在此之前在某处声明它。

简单的解决方法是在上面添加main()

void* threadface_func(void* parameter);

或者,您可以将整个函数移到main().

于 2013-03-22T18:07:12.237 回答