함수간 변수 사용 및 flag 사용
해까닥
두개의 다른 함수가 있고한개의함수 안에서 다른 함수를 실행하는데flag를 사용해서 제가 필요한 값만얻어오려고 합니다. 알려주시면 감사하겠습니다.int findflag;void VisionDlg::Image(IplImage * m_srcImage, double decording_frame)
{
FindCorner(label.I_blobnum,center_w,center_h,m_image); 이 함수를 실행
CvFont font2;
//cvInitFont(&font2,CV_FONT_HERSHEY_SIMPLEX,0.5,0.5);
cvInitFont(&font2, CV_FONT_HERSHEY_COMPLEX,0.5,0.5);
char time[10] ={0,};
sprintf(time,%.1f,decording_sec);
int newdataflag = 0;
for(k=0;k4;k++)
{
Mat_dot[k]=Mat_pt[k+2];
}for (row=0;row2;row++)
{
for(col=0;col4;col++)
{
if(row ==0)Mat_poxy[row][col] = Mat_dot[col].x - center_w;//Mat_poxy[row][col] = Mat_dot[col].x-400;
elseMat_poxy[row][col]= center_h - Mat_dot[col].y;//Mat_poxy[row][col]=300-Mat_dot[col].y;
}
}
for (int jh = 1; jh 4; jh++)
{
if(preDotpt[jh].y == Mat_dot[jh].y && preDotpt[jh].x == Mat_dot[jh].x)
newdataflag = 0;
else
{
newdataflag = 1;
break;
}
}
//}
for (int jh = 1; jh 4; jh++)
{
preDotpt[jh] = Mat_dot[jh];
}
if (pre_decording_sec != decording_sec)
secflag = 0;
PostVisionSolFile = fopen(config.Sol_VisionPath.GetBuffer(),a+);fprintf(PostVisionSolFile,%d\t,(int)decording_sec);
fprintf(PostVisionSolFile,%d\t ,(int)(decording_frame));
for (col=0;col4;col++)
for (row=0;row2;row++)
fprintf(PostVisionSolFile,%d\t ,Mat_poxy[row][col]);
fprintf(PostVisionSolFile,%d\t,newdataflag);
fprintf(PostVisionSolFile,\n);fclose(PostVisionSolFile);
cvShowImage(Vision ,m_image);
DelVisMem();
cvReleaseImage( &labeled );
cvReleaseImage( &grayimage );
Invalidate(FALSE);
secflag++;
}
void VisionDlg::FindCorner(int I_blobnum,int center_w, int center_h,IplImage *m_image1) 함수 실행
{
for(int zz=0; zz label.I_blobnum; zz++ )
{
Mat_pt[0] = cvPoint( label.I_blobinform[zz].x,label.I_blobinform[zz].y);;
Mat_pt[1] = cvPoint( Mat_pt[0].x + label.I_blobinform[zz].width, Mat_pt[0].y + label.I_blobinform[zz].height);CvMemStorage* storage= cvCreateMemStorage(0);
CvSeq* contours= 0;// 1. 윤곽 검출
int mw= label.I_blobinform[zz].width;
int mh= label.I_blobinform[zz].height;IplImage* marker = cvCreateImage( cvSize(mw, mh), 8, 1 );
label.getblob(marker, zz);cvFindContours( marker, storage, &contours, sizeof (CvContour), CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
//2. 꼭지점 추출
if (contours != 0)
{
int x;
doublefMaxDist;
CvPointcorner[4];for( x=0; x 4; x++ )corner[x] = cvPoint(0, 0);//초기 위치 설정
CvPoint *st = (CvPoint *)cvGetSeqElem( contours, 0 );
// 첫 번 째 꼭지점 추출(최대 거리를 가지는 점 선택)
fMaxDist = 0.0;for( x = 1; x contours-total; x++ )
{
CvPoint* pt = (CvPoint *)cvGetSeqElem( contours, x );double fDist = sqrt( (double)(( st-x - pt-x ) * ( st-x - pt-x ) + ( st-y - pt-y ) * ( st-y - pt-y ) ));if( fDist fMaxDist )
{
corner[0] = *pt;fMaxDist = fDist;
}
}// 두 번 째 꼭지점 추출(첫 번 째 꼭지점에서 최대 거리를 가지는 점 선택)
fMaxDist = 0.0;for( x = 0; x contours-total; x++ )
{
CvPoint* pt = (CvPoint *)cvGetSeqElem( contours, x );double fDist = sqrt( (double)(( corner[0].x - pt-x ) * ( corner[0].x - pt-x ) + ( corner[0].y - pt-y ) * ( corner[0].y - pt-y ) ));if( fDist fMaxDist )
{
corner[1] = *pt;fMaxDist = fDist;
}
}// 세 번 째 꼭지점 추출(첫 번 째, 두 번 째 꼭지점에서 최대 거리를 가지는 점 선택)
fMaxDist = 0.0;for( x = 0; x contours-total; x++ )
{
CvPoint* pt = (CvPoint *)cvGetSeqElem( contours, x );double fDist =sqrt( (double)(( corner[0].x - pt-x ) * ( corner[0].x - pt-x ) + ( corner[0].y - pt-y ) * ( corner[0].y - pt-y ) ))
+sqrt( (double)(( corner[1].x - pt-x ) * ( corner[1].x - pt-x ) + ( corner[1].y - pt-y ) * ( corner[1].y - pt-y ) ));if( fDist fMaxDist )
{
corner[2] = *pt;fMaxDist = fDist;
}
}// 네 번 째 꼭지점 추출
// (벡터 내적을 이용하여 좌표평면에서 사각형의 너비의 최대 값을 구한다.)
int x1 = corner[0].x;int y1 = corner[0].y;
int x2 = corner[1].x;int y2 = corner[1].y;
int x3 = corner[2].x;int y3 = corner[2].y;int nMaxDim = 0;for( x = 0; x contours-total; x++ )
{
CvPoint* pt = (CvPoint *)cvGetSeqElem( contours, x );int x = pt-x;
int y = pt-y;int nDim =abs( ( x1 * y2 + x2 * y + x * y1 ) - ( x2 * y1 + x * y2 + x1 * y ) )
+abs( ( x1 * y + x * y3 + x3 * y1 ) - ( x * y1 + x3 * y + x1 * y3 ) )
+abs( ( x * y2 + x2 * y3 + x3 * y ) - ( x2 * y + x3 * y2 + x * y3 ) );if( nDim nMaxDim )
{
corner[3] = *pt;nMaxDim = nDim;
}
}Mat_pt[2] = cvPoint( corner[0].x + label.I_blobinform[zz].x , corner[0].y + label.I_blobinform[zz].y );
Mat_pt[3] = cvPoint( corner[1].x + label.I_blobinform[zz].x , corner[1].y + label.I_blobinform[zz].y );
Mat_pt[4] = cvPoint( corner[2].x + label.I_blobinform[zz].x , corner[2].y + label.I_blobinform[zz].y );
Mat_pt[5] = cvPoint( corner[3].x + label.I_blobinform[zz].x , corner[3].y + label.I_blobinform[zz].y );////////////////////////// sort
CvPoint center,tmp_sort[4];
double dmax,dmin,dmax_se,dmin_se,dmin_th;
double d[4],d_se[4],d_th[4];
int maxnum,minnum,minnum_se,minnum_th;
dmax = 0;dmin = 640;dmin_se = 640;dmin_th = 640;
center = cvPoint(100,100);//cvPoint(320,240);
tmp_sort[0] = Mat_pt[2];tmp_sort[1] = Mat_pt[3];tmp_sort[2] = Mat_pt[4];tmp_sort[3] = Mat_pt[5];d[0] = sqrt(double((tmp_sort[0].x-center.x)*(tmp_sort[0].x-center.x)+(tmp_sort[0].y-center.y)*(tmp_sort[0].y-center.y)));
d[1] = sqrt(double((tmp_sort[1].x-center.x)*(tmp_sort[1].x-center.x)+(tmp_sort[1].y-center.y)*(tmp_sort[1].y-center.y)));
d[2] = sqrt(double((tmp_sort[2].x-center.x)*(tmp_sort[2].x-center.x)+(tmp_sort[2].y-center.y)*(tmp_sort[2].y-center.y)));
d[3] = sqrt(double((tmp_sort[3].x-center.x)*(tmp_sort[3].x-center.x)+(tmp_sort[3].y-center.y)*(tmp_sort[3].y-center.y)));for (int k=0;k4;k++)
{
if (d[k] dmax)
{
dmax = d[k];
maxnum = k;
}
if (d[k] dmin)
{
dmin = d[k];
minnum = k;
}
}d_se[0] = sqrt(double((tmp_sort[0].x-tmp_sort[maxnum].x)*(tmp_sort[0].x-tmp_sort[maxnum].x)+(tmp_sort[0].y-tmp_sort[maxnum].y)*(tmp_sort[0].y-tmp_sort[maxnum].y)));
d_se[1] = sqrt(double((tmp_sort[1].x-tmp_sort[maxnum].x)*(tmp_sort[1].x-tmp_sort[maxnum].x)+(tmp_sort[1].y-tmp_sort[maxnum].y)*(tmp_sort[1].y-tmp_sort[maxnum].y)));
d_se[2] = sqrt(double((tmp_sort[2].x-tmp_sort[maxnum].x)*(tmp_sort[2].x-tmp_sort[maxnum].x)+(tmp_sort[2].y-tmp_sort[maxnum].y)*(tmp_sort[2].y-tmp_sort[maxnum].y)));
d_se[3] = sqrt(double((tmp_sort[3].x-tmp_sort[maxnum].x)*(tmp_sort[3].x-tmp_sort[maxnum].x)+(tmp_sort[3].y-tmp_sort[maxnum].y)*(tmp_sort[3].y-tmp_sort[maxnum].y)));for (int kk=0;kk4;kk++)
{
if (d_se[kk] dmin_se && kk != maxnum && kk != minnum)
{
dmin_se = d_se[kk];
minnum_se = kk;
}
}d_th[0] = sqrt(double((tmp_sort[0].x-tmp_sort[minnum].x)*(tmp_sort[0].x-tmp_sort[minnum].x)+(tmp_sort[0].y-tmp_sort[minnum].y)*(tmp_sort[0].y-tmp_sort[minnum].y)));
d_th[1] = sqrt(double((tmp_sort[1].x-tmp_sort[minnum].x)*(tmp_sort[1].x-tmp_sort[minnum].x)+(tmp_sort[1].y-tmp_sort[minnum].y)*(tmp_sort[1].y-tmp_sort[minnum].y)));
d_th[2] = sqrt(double((tmp_sort[2].x-tmp_sort[minnum].x)*(tmp_sort[2].x-tmp_sort[minnum].x)+(tmp_sort[2].y-tmp_sort[minnum].y)*(tmp_sort[2].y-tmp_sort[minnum].y)));
d_th[3] = sqrt(double((tmp_sort[3].x-tmp_sort[minnum].x)*(tmp_sort[3].x-tmp_sort[minnum].x)+(tmp_sort[3].y-tmp_sort[minnum].y)*(tmp_sort[3].y-tmp_sort[minnum].y)));for (int kkk=0;kkk4;kkk++)
{
if (d_th[kkk] dmin_th && kkk != maxnum && kkk != minnum && kkk != minnum_se)
{
dmin_th = d_th[kkk];
minnum_th = kkk;
}
}Mat_pt[2] = tmp_sort[maxnum];
Mat_pt[3] = tmp_sort[minnum_th];
Mat_pt[4] = tmp_sort[minnum_se];
Mat_pt[5] = tmp_sort[minnum];
////////////////////////// sortcvReleaseMemStorage( &storage );
cvReleaseImage( &marker );CvScalar color = cvScalar(0,0,255);//b,g,r
CvScalar color1 = cvScalar(0,255,0);
CvScalar color2 = cvScalar(255,0,0);
CvScalar color3 = cvScalar(0,0,0);
&nbbr /if((Mat_pt[2].y 200) && (Mat_pt[5].y 300) && (Mat_pt[5].x 300) && (Mat_pt[2].y == Mat_pt[3].y) && (Mat_pt[2].x == Mat_pt[4].x) && (Mat_pt[3].x == Mat_pt[5].x))
{
cvCircle(m_image1,Mat_pt[2],5,color,2,8,0);
cvCircle(m_image1,Mat_pt[3],5,color1,2,8,0);
cvCircle(m_image1,Mat_pt[4],5,color2,2,8,0);
cvCircle(m_image1,Mat_pt[5],5,color3,2,8,0);
findflag = 0;
} 이부분에 해당하는 값만 위의 함수에 사용하고 싶다
else
{
findflag = 1;
}}}
}
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2699304 | [기초]아직 안주무시는분 계신가요..?포인터배열? 좀 도와주세요. | 놀리기 | 2025-06-24 |
2699272 | printf() 함수이용해서 프로그램 만들기 질문요! (5) | 다가 | 2025-06-24 |
2699221 | PUSH와 POP코드를 더 간단하게 어떻게 해야할까요? | 파라미 | 2025-06-24 |
2699192 | 설치오류가 자꾸 나요 한번봐주세여~ (1) | 소녀틳향기 | 2025-06-23 |
2699161 | for loop안에 있는 if문 (9) | Orange | 2025-06-23 |
2699105 | 링크더리스트 이전 링크값 출력함수. | 꼬꼬마 | 2025-06-23 |
2699078 | 정수를 한자리씩 배열에 담는 법은 어떻게 하나요.. (4) | 귀염포텐 | 2025-06-22 |
2699024 | C언어 공부하려는데 도와주세요!!! (2) | 달님 | 2025-06-22 |
2698994 | 날짜 계산하는 C 코드 짜고 있는데 꽉 막혀서 질문드립니다.. (6) | 별 | 2025-06-22 |
2698967 | 파일삭제 윈도우 폴더까지 접근하게하는 함수가 뭔가요 (2) | 샤인 | 2025-06-21 |
2698938 | c언어 메모리질문 (3) | 나래 | 2025-06-21 |
2698909 | 서비스 요청 고객 관리 프로그램 짜는것좀 도와주세요ㅜㅜ (4) | 궁수자리 | 2025-06-21 |
2698882 | 프로그래밍좀 짜주세요 (3) | 황예 | 2025-06-21 |
2698855 | 카프-라빈 알고리즘 코딩 분석좀 도와주세요.. | 꽃봄 | 2025-06-20 |
2698829 | 학점계산기 (7) | MyWay | 2025-06-20 |
2698782 | 기초적인 함수 질문이요ㅠㅠㅠㅠ | 내담 | 2025-06-20 |
2698749 | 프로그램 짜던 도중 패닉입니다...ㅜ | 파랑 | 2025-06-19 |
2698719 | 조건부컴파일 질문입니다.~ (2) | 큐트 | 2025-06-19 |
2698693 | 재귀 함수 에러 | 바닐라 | 2025-06-19 |
2698673 | 고민이있는데 들어좀주세요!! (1) | 초코맛캔디 | 2025-06-19 |