Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C++
Hi,
 
I am a student in asia. Now I am doing a project in HCI(Human Interacion Computer). I meet a problem for this code, the following code that I can compile and pass. But, When I am running .exe, there is an error and I try to debug it shows :stack over" Can somebody help me, to find the problem?
Thanks!
 
By the way i use dev-c Ver4.9.9.2
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include "math.h"
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <sstream>
#include <time.h>
using namespace std;
/* --------------------------------------------*/
int main()
{
    int c = 0; 
    CvSeq* a = 0;
    CvCapture* capture = cvCaptureFromCAM(0);
    if(!cvQueryFrame(capture)){ cout<<"Video capture failed, please check the camera."<<endl;}
    else{cout<<"Video camera capture status: OK"<<endl;};
    CvSize sz=cvGetSize(cvQueryFrame(capture));
	IplImage* src = cvCreateImage( sz, 8, 3 );
	IplImage* YCC=cvCreateImage( sz, 8, 1);
	IplImage* YCrCb=cvCreateImage( sz, 8, 3);
	
	CvMemStorage* storage = cvCreateMemStorage(0);
	CvMemStorage* areastorage = cvCreateMemStorage(0);
	CvMemStorage* minStorage = cvCreateMemStorage(0);
	CvMemStorage* dftStorage = cvCreateMemStorage(0);
	CvSeq* contours = NULL;
	cvNamedWindow( "src",1);
    // 
	while(c!= 27)
	{
	   IplImage* bg = cvCreateImage( sz, 8, 3);
	   uchar *data=(uchar *)YCC->imageData;
	   CvScalar w;
           double Y,Cr,Cb;
	   cvRectangle( bg, cvPoint(0,0), cvPoint(bg->width,bg->height), CV_RGB( 255, 255, 255), -1, 8, 0 );
	   bg->origin = 1;
	   for(int b = 0; b< int(bg->width/10); b++)
	   {
	      cvLine( bg, cvPoint(b*20, 0), cvPoint(b*20, bg->height), CV_RGB( 200, 200, 200), 1, 8, 0 );
	      cvLine( bg, cvPoint(0, b*20), cvPoint(bg->width, b*20), CV_RGB( 200, 200, 200), 1, 8, 0 );
	   }
	   src = cvQueryFrame( capture);
	   cvCvtColor(src,YCrCb,CV_BGR2YCrCb);
        /********skin detec****************/ 
        for(int i=0; i<(src->height);i++)
        for(int j=0;j<src->width;j++)
        {  
            w = cvGet2D(YCrCb,i,j);
           Y = w.val[0];
           Cr= w.val[1];
           Cb= w.val[2];
           if ((Y>=60)&&(Y<=250)&&(Cr<210)&&(Cr>140)&&(Cb<130)&&(Cb>90))
           {
              data[i*(YCC->widthStep) + j*(YCC->nChannels) + 0 ]=255;
              data[i*(YCC->widthStep) + j*(YCC->nChannels) + 1 ]=255;
              data[i*(YCC->widthStep) + j*(YCC->nChannels) + 2 ]=255;
           }
           else
           {
              data[i*(YCC->widthStep) + j*(YCC->nChannels) + 0 ]=0;
              data[i*(YCC->widthStep) + j*(YCC->nChannels) + 1 ]=0;
              data[i*(YCC->widthStep) + j*(YCC->nChannels) + 2 ]=0;
           }
        }
     }
        cvThreshold(YCC, YCC ,50, 255, CV_THRESH_BINARY );
        cvCvtColor(YCC, YCC, CV_YCrCbRGB);
        cvCvtColor(YCC, gray, RGB2GRAY);
         cvSmooth(gray, hsv_mask, CV_MEDIAN, 27, 0, 0, 0};
	cvFindContours( YCC, storage, &contours, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_NONE, cvPoint(0,0) );
	CvSeq* contours2 = NULL;
	double result = 0, result2 = 0;
	while(contours)
	{
            result = fabs( cvContourArea( contours, CV_WHOLE_SEQ ) );
	    if ( result > result2) {result2 = result; contours2 = contours;};
	    contours  =  contours->h_next;
	} 
	//gesture recognition 
         if (contours2)
	{
	   CvRect rect = cvBoundingRect( contours2, 0 );//畫出手外圍橢圓 
	   cvRectangle( bg, cvPoint(rect.x, rect.y + rect.height), cvPoint(rect.x + rect.width, rect.y), CV_RGB(0, 0, 255), 1, 8, 0 );
	  int checkcxt = cvCheckContourConvexity( contours2 );
	  CvSeq* hull = cvConvexHull2( contours2, 0, CV_CLOCKWISE, 0 );
	  CvSeq* defect = cvConvexityDefects( contours2, hull, dftStorage );
	  if( defect->total >=40 ) {cout << " Closed Palm " << endl;}
          else {cout << " Open Palm " << endl;}
	  cout << "defet: " << defect->total << endl;
	CvBox2D box = cvMinAreaRect2( contours2, minStorage );
 	cvCircle( bg, cvPoint(box.center.x, box.center.y), 3, CV_RGB(200, 0, 200), 2, 8, 0 );	
	cvEllipse( bg, cvPoint(box.center.x, box.center.y), cvSize(box.size.height/2, box.size.width/2), box.angle, 0, 360, CV_RGB(220, 0, 220), 1, 8, 0 );
	IplImage* contour = cvCreateImage( sz, 8, 3 );
	
         cvDrawContours( bg, contours2,  CV_RGB( 255, 0, 0), CV_RGB( 0, 0, 100), 1, 4, 8, cvPoint(0,0));
	cvShowImage( "src", src)
	cvNamedWindow("bg",0); 
	cvShowImage("bg",bg); 
	cvReleaseImage( &bg);
	c = cvWaitKey( 1000);
	}
	cvReleaseCapture( &capture);
	cvDestroyAllWindows();
}
Posted 13-Dec-10 23:25pm
Edited 13-Dec-10 23:30pm
JF201552.8K
v2
Comments
JF2015 at 14-Dec-10 5:30am
   
Edited to correct code formatting.
CPallini at 14-Dec-10 6:49am
   
Please report the exact error message and, above all, have a look at the debugger window named 'call stack' (on Visual Studio) where you may find useful info.
Dave Kreskowiak at 14-Dec-10 11:01am
   
You're going to have to point out the line that throws the error. A StackOverflow usually means code is constantly calling itself, but never returns to the caller, therefore running the Stack out of space.
thatraja at 26-Dec-10 2:58am
   
Include the error message in your question
aslican1988 at 7-Jul-11 15:51pm
   
YCrCb color space Real Time Hand Posture/Gesture Recognition with OpenCV http://www.youtube.com/watch?v=kQxiFaZbOfA
TRK3 at 7-Jul-11 15:58pm
   
Very cool!
SAKryukov at 7-Jul-11 17:31pm
   
Great thing! Who is the author of this stuff, do you know? --SA
SAKryukov at 7-Jul-11 16:06pm
   
"Stack over"?! "Game overflow"! --SA
harish85 at 7-Jul-11 16:32pm
   
I am just curious ,what do you do in this program?.
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

Hopefully, there is not need to look at this pretty long code dump. Also, your bug can be somewhere else. The error you are reporting must be "Stack overflow". This kind of error is pretty easy to investigate.
 
Too bad you don't indicate the line of code where the exception is thrown. I never understood it. Do you run the code not under debugger? Why?
 
It always happen in the case of recursion or mutual recursion which never ends, see http://en.wikipedia.org/wiki/Recursion[^], http://en.wikipedia.org/wiki/Recursion_(computer_science)[^].
 
First, you need to run the code under debugger, run into exception and look at the call stack to get an idea where the most recent call (on the top of current stack) come from. Pay attention for repeating calls the the same functions or a couple of the same functions (or more).
 
If you still don't see why recursion is never ended, try to find a place for a break point which would break execution before exception is thrown. A good idea is to put it at the beginning of one of the function which is called repeatedly. Form a break point, run step by step until you run into exception (than next time remember this point and use debugger's "Step into" instead of "Step over") or find a pattern absurdly leading to infinite calls deeper into the stack. This search will always converge to a solution; and very likely you will figure the problem well before you follow all the detail of the code in debug mode.
 
—SA
  Permalink  
v2
Comments
Espen Harlinn at 7-Jul-11 16:40pm
   
Good points, my 5 - If he is building OpenCV from source - he can get Visual Studio to break off execution when the stack is overrun. The call stack should provide valuable information.
SAKryukov at 7-Jul-11 16:49pm
   
Thank you, Espen. --SA
TRK3 at 7-Jul-11 16:52pm
   
See OP's comment in the original thread. Original post was back in December. With no help or solution then. Today OP added a comment with a link: http://www.youtube.com/watch?v=kQxiFaZbOfA Which appears to be a video of the completed project in action. So I guess OP already solved the stack overflow problem and was just updating us with a video showing the solution. Check it out. Quite cool.
SAKryukov at 7-Jul-11 17:30pm
   
Sorry, you messed up. This link is not by OP. OP is "the_same", this person is not the same (pun intended) :-) OP did not report that the problem is solved. I think my answer is adequate and useful. Cheers, --SA
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 3

**** u !! wat d hell code is ful of errors!! how can any 1 create .exe file out of it
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 Sergey Alexandrovich Kryukov 766
1 OriginalGriff 452
2 sanket saxena 329
3 Tadit Dash 310
4 Peter Leow 228
0 Sergey Alexandrovich Kryukov 11,990
1 OriginalGriff 7,349
2 Peter Leow 5,003
3 Abhinav S 4,003
4 Maciej Los 3,575


Advertise | Privacy | Mobile
Web02 | 2.8.140421.2 | Last Updated 1 Sep 2011
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Use
Layout: fixed | fluid