RAW 파일 읽고 쓰는 기본 소스 (C++)

코딩과 교육/전문코딩 2007. 11. 19. 21:58

영상처리 프로그램을 시작한다. 최종적으로 Mindstorms NXT 에서 사용할 것인데, 그전에 PC 기반으로 영상처리 기본 연습을 해야 할 듯 하다. 우선은 영상을 읽어 들이고 처리하는 부분부터 시작하고, 나중에 Arm7 으로 무장한 Mindstorms Intelligent Bric 을 사용한 영상인식과 처리까지 가능하게 하려고 구상하고 있다. 중간단계로 WebCam 을 사용한 PC 기반에서의 영상인식과 처리를 구현하는 것을 생각하고 있다.

우선 오랜만에 그간 안하던 Visual C++ 프로그램을 시작한다. 사실 C 만 주로 해서 아직까지 C++ 프로그램은 익숙하지 않다. 이번기회에 C++ 마인드로 새롭게 갖춰야 할 필요도 느낀다. 사실 작성하고 보니 아래 소스는 C++ 이라기보다는 그냥 C를 사용해 만들어진 프로그램이다.

#include <stdio.h>

void main()
{
 int i,j;
 unsigned char OrgImg[256][256];

 FILE *infile = fopen("coin.raw", "rb");
 if(infile==NULL) { printf("File open error!!"); return;}
 fread(OrgImg, sizeof(char), 256*256, infile);
 fclose(infile);

 for(i=0; i<256; i++)
 {
  for(j=0;j<256;j++)
  {
   OrgImg[i][j] = 255-OrgImg[i][j];
  }
 }

 FILE *outfile=fopen("coin_inv.raw", "wb");
 fwrite(OrgImg, sizeof(char), 256*256, outfile);
 fclose(outfile);
}

기본적으로 RAW 파일은 영상의 정보없이 그냥 데이타만 가득한 파일이다. RAW 파일은 특성상 전혀 데이타의 손실이 없다. 하지만 데이타의 크기가 크다는 단점과 함께 파일에 대한 정보가 없기 때문에 이용에 불편함이 있다.

위 소스는 256 x 256 짜리 RAW 파일을 읽어 들여서 255 - Value 연산을 통해 역상을 만들어 저장하는 것이다. 영상처리랄 것도 없이 그저 영상을 읽어들이고 다시 쓰는 기초작업이다.

이런 방식으로 파일을 읽고, 처리하고, 저장하는 식으로 진행될 것이다.
아래에 RAW 파일로 만든 원본 이미지와 역상 이미지를 둔다.

사용자 삽입 이미지
깨끗하게 영상이 반전되어 나타난다. 당연한 결과지면 역시 드러나는 결과를 눈으로 보는 것과 수치로 이해하는 것의 차이는 매우 크다는 것을 실감하는 순간이었다. ^^ (당연히 이렇게 되겠지... 우와~ 멋있는데 ^@@^ )


RAW 파일 읽고 쓰는 기본 소스 (C++)
http://electoy.tistory.com/19
JelicleLim (2007.11.19)