Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[6302] Re:이미지 프로세싱에 관하여...
외랑 [jaehuns] 5447 읽음    2009-05-01 13:39
/*그냥 원본 옆에다 간단히 적어봅니다.*/
/* 간단하죠? */

아기오뎅 님이 쓰신 글 :
: #include <stdio.h>
: #include <stdlib.h>
: #include <mymemory.h>
:
: typedef unsigned char BYTE;                /*   BYTE 라는 자료형을 unsigned char  선언*/
:
: void TOUEI1(origin_image, horizon, vertical, size_x, size_y);       /* 전역 함수 */
:
: void main(argc, argv)  
: int argc;
: char *argv[];
: {
:     char origin_image_file_name[80];
:     char projection_x_file_name[80];
:     char projection_y_file_name[80];
:     int i,j;
:     int IMAGE_SIZE_ROW, IMAGE_SIZE_COL;
:     BYTE **origin_image;
:     BYTE *buff;
:     unsigned int *horizon;
:     unsigned int *vertical;
:    
:     FILE *I_file, *projection_x, *projection_y;
:     FILE *xfile, *yfile;
:
:     /*
:     prompt user to input arguments.    입력 파일이름과 이미지 사이즈를 입력받습니다.
:     */
:
:     printf("origin_image_file_name : ");
:     scanf("%s", origin_image_file_name);
:     printf("No. of image column : ");
:     scanf("%d",&IMAGE_SIZE_COL);
:     printf("No. of image line   : ");
:     scanf("%d",&IMAGE_SIZE_ROW);
:
:     printf("projection_x_file_name : ");
:     scanf("%s", projection_x_file_name);          /* 새로 만들어질 프로젝션 파일의 저장 이름을 받습니다 */
:     printf("projection_y_file_name : ");
:     scanf("%s", projection_y_file_name);
:
:     /*
:     read image file from disk to memory
:     */
:
:     if((I_file=fopen(origin_image_file_name, "rb")) == NULL)   /* 입력이미지파일 바이너리읽기모드로 오픈 실패하면 메시지 보여주고 종료합니다. */
:     {
:         printf("file open error!");
:         exit(-1);
:     }
:
:     if((projection_x=fopen(projection_x_file_name, "wb")) == NULL)  /* x프로젝션 파일 바이너리 쓰기 모드 오픈 실패하면 메시지 보여주고 종료합니다. */
:     {
:         printf("file open error!");
:         exit(-1);
:     }
:
:     if((projection_y=fopen(projection_y_file_name, "wb")) == NULL) /* y프로젝션 파일 바이너리 쓰기 모드 오픈 실패하면 메시지 보여주고 종료합니다. */
:     {
:         printf("file open error!");
:         exit(-1);
:     }
:
:     xfile = fopen("x.dat", "wt");  /* x.dat, y.dat 파일을 텍스트 쓰기 모드로 오픈합니다.
:     yfile = fopen("y.dat", "wt");
:
:     /*
:     MEMORY ALLOCATION
:     */
:               /* 이미지를 읽어들일 메모리 버퍼를 할당합니다. */
:     origin_image = bmatrix(IMAGE_SIZE_ROW, IMAGE_SIZE_COL);
:     buff = bvector(IMAGE_SIZE_COL);
:     horizon = uivector(IMAGE_SIZE_ROW);
:     vertical = uivector(IMAGE_SIZE_COL);
:
:     /*
:     IMAGE READING
:     */
:               /* 이미지를 파일에서 읽어 들입니다. */
:     for(i=0;i<IMAGE_SIZE_ROW;i++)
:     {
:         fread(buff, sizeof(BYTE), IMAGE_SIZE_COL, I_file);
:         for(j=0;j<IMAGE_SIZE_COL;j++)
:             origin_image[i][j] = buff[j];
:     }
:
:     fclose(I_file);
:
:     /*
:     calculate projection
:     */
:
:     TOUEI1(origin_image, horizon, vertical, IMAGE_SIZE_ROW, IMAGE_SIZE_COL);
:
:     /*
:     saving text file
:     */
:               /* 만들어진 x, y 프로젝션을 텍스트 파일로 각각 저장합니다. */
:     for(i=0;i<IMAGE_SIZE_ROW;i++)
:     {
:         fprintf(xfile, "%d\n", horizon[i]);
:     }
:
:     for(i=0;i<IMAGE_SIZE_COL;i++)
:     {
:         fprintf(yfile, "%d\n", vertical[i]);
:     }
:
:     /*
:     saving projection file
:     */
:                /* 만들어진 x, y 프로젝션을 바이너리 파일로 각각 저장합니다. */
:     fwrite(horizon, sizeof(unsigned int), IMAGE_SIZE_ROW, projection_x);    
:     fwrite(vertical, sizeof(unsigned int), IMAGE_SIZE_COL, projection_y);   
:    
/*  사용한 메모리를 해제 합니다. */
:     free_bmatrix(origin_image,IMAGE_SIZE_ROW, IMAGE_SIZE_COL);
:     free_bvector(buff);
:     free_uivector(horizon);
:     free_uivector(vertical);
:
:     fclose(projection_x);
:     fclose(projection_y);
: }
:
: void TOUEI1(origin_image, horizon, vertical, size_x, size_y)
:     /*
:     purpose: x,y direction projection    x, y 방향의 프로젝션 인자
:     arguments:
:                 h : horizon projection
:                 v : vertical projection
:     */
:     BYTE **origin_image;
:     unsigned int *horizon;
:     unsigned int *vertical;
:     int size_x, size_y;
: {
:     int i, j;
:    
:     /*
:     calculate horizon projection
:     */
:               /* 수평 방향 (x)의 프로젝션을 계산합니다. */
:     for(i=0;i<size_x;i++)
:     {
:         horizon[i]=0;
:         for(j=0;j<size_y;j++)     /* 각각의 y 좌표 마다 이미지의 x축 방향의 픽셀값을 더합니다. */
:         {                               
:             horizon[i] += origin_image[i][j];
:         }        /* 이미지를 옆(x)에서 쳐다 봤을 때 프로젝션(투영)되는 밝기값(픽셀값)의 합 입니다. */
:     }
:
:     /*
:     calculate vertical projection
:     */
:               /* 수직 방향 (y)의 프로젝션을 계산합니다. */
:     for(j=0;j<size_y;j++)
:     {
:         vertical[j]=0;
:         for(i=0;i<size_x;i++) /* 각각의 x 좌표 마다 이미지의 y축 방향의 픽셀값을 더합니다. */
:         {
:             vertical[j] += origin_image[i][j];
:         } /* 이미지를 위(y)에서 쳐다 봤을 때 프로젝션(투영)되는 밝기값(픽셀값)의 합 입니다. */
:     }
: }
:
: 간단한 주석좀 부탁드립니다. 이미지 프로세싱하는 프로그램이라는건 알겠는데 두개의 이미지를 하나로 합치는 것 맞나요? 아...헤더파일인 mymemory.h 가 없어서 골치 아프니다..
: 아니면 이게 대충 모하는 프로그램이다 라는 것만 알려주세요 ㅠ

+ -

관련 글 리스트
6301 이미지 프로세싱에 관하여... 아기오뎅 6118 2009/04/30
6302     Re:이미지 프로세싱에 관하여... 외랑 5447 2009/05/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.