수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

함수간 변수 사용 및 flag 사용

해까닥

2023.04.01

두개의 다른 함수가 있고한개의함수 안에서 다른 함수를 실행하는데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;

}}}
}

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

번호 제 목 글쓴이 날짜
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
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com