[TIL]230320 - 영상처리 3주차: 영상파일형식(2)

Jimin·2023년 3월 20일
0
post-thumbnail

PxM file 형식 및 예

  • PBM(Portable Bit Map): 1-bit binary/BW image
  • PGM(Portable Gray Map): 8-bit gray level image
  • PPM(portable Pix Map): 24-bit(3채널 각 8-bit) color image

PGM header


  • 크기를 크게 잡고 작게 쓰면 fprintf 못 씀


1차원 배열

  • 배열의 일부를 사용할 경우 반복문으로 1byte씩 출력해야하므로 속도가 느림
  • 메모리 동적할당 및 포인터를 사용하는 것이 효과적임

해결방법

for (int i = 0; i < H; i++) {
	for (int j = 0; j < W; j++) {
    	lpimg[i*w+j]
    }
}


Color Image

for (int i = 0; i < H; i++) {
	for (int j = 0; j < W; j++) {
    	for (int k = 0; k < 3; k++) {
        	lpimg[(i*W*3) + (j*3) + k]
        }
    }
}


모든 영상(2차원 배열: 모노크롬, 3차원 배열: 컬러)의 자료구조는 1차원 pointer로 선언하고 접근함

bwImg[i][j] = bwImg[i*W+j] = (bwImg+iW+j)

colorImg[i][j][k] = colorImg[iW3+j*3+k] =
(bwImg+iW3+j3+k)


BMP file 형식 및 예

파일 구조

  • file header(14-bit)
  • image information header(40-bit)
  • palette/pallette(팔레트 크기)
  • file body: 행이 역순으로 저장되어 있음, 칼라인 경우 BGR 순서임
  • BITMAPFILEHEADER(14 = 2+4+2+2+4 bytes)
  • 선언(windows.h, wingdi.h)
  • BITMAPFILEHEADER 출력 예
  • 4byte x 256개 팔레트

  • BITMAPINFOHEADER(40=4+4+4+2+2+4+4+4+4+4+4 bytes)

  • 선언(windows.h, wingdi.h)

  • BITMAPINFOHEADER 출력 예


  • palette 자료구조 RGBQUAD(4 bytes)
  • 선언(windows.h, wingdi.h), 순서에 유의할 것!(BGR)

  • 전체 팔레트 개수 = 2^biBitCount
  • 전체 팔레트 크기 = 2^biBitCount x 4-byte

- Palette 출력 예(256 gray image)


색 반전 후 저장

	// Reversed Image
	for (int i = 0; i<hInfo.biHeight; i++) {
		for (int j = 0; j<hInfo.biWidth; j++)
			for(int k=0;k<3;k++)
				lpImg[i*rwsize + j*3 + k] = 255 - lpImg[i*rwsize + j*3 + k];
	}

	// Reversed Image
	for (int i = 0; i<hInfo.biHeight; i++) {
		for (int j = 0; j<hInfo.biWidth; j++)
			lpImg[i*rwsize + j] = 255 - lpImg[i*rwsize + j];
	}

0개의 댓글