반응형
디지털 영상은 보통 2차원 배열로 표현된다. 각 배열 원소는 픽셀이라고 불린다. 흑백 영상의 경우, 하나의 픽셀은 보통 0에서 255의 값을 가지며 0은 검정색을, 255는 흰색을 나타낸다. 영상이 unsigned char image[ROWS][COLS]에 저장되어 있다고 가정하고 몇가지의 간단한 영상 처리 연산들을 포인터를 이용하여 구현하여 보자. 영상 처리된 겨로가는 화면에 각 픽셀의 값을 숫자로 표시한다.
(a) : 이진화 : 각 픽셀의 값이 임계값보다 낮으면 0으로 만들고 임계값보다 높으면 255로 만든다. (나는 5이상이면 255, 5미만이면 0으로 하였음)
(b) : 반전 : 영상의 흑백을 반전시킨다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #include <stdio.h> #define HEIGHT 5 #define WIDTH 10 void print(int array[][WIDTH]); void binarization(int array[][WIDTH]); void reverse(int array[][WIDTH]); int main(void) { int image[HEIGHT][WIDTH]={{0,0,0,0,9,0,0,0,0,0}, {1,0,0,9,9,0,0,0,0,0}, {5,0,9,0,9,0,0,0,0,4}, {4,0,0,0,8,0,0,2,0,0}, {3,0,0,0,9,0,0,0,0,8}}; printf("원본 : \n"); print(image); printf("이진화 : \n"); binarization(image); print(image); printf("반전 : \n"); reverse(image); print(image); return 0; } void print(int array[][WIDTH]) { int i,j; for(i=0;i<HEIGHT;i++) {for(j=0;j<WIDTH;j++) { printf("%3d ", array[i][j]); } printf("\n"); } } void binarization(int array[][WIDTH]) { int *p, *endp; p=&array[0][0]; endp=&array[HEIGHT-1][WIDTH-1]; while(p<=endp) { if(*p>=5) {*p=255;} else if(*p<5) {*p=0;} p++; } } void reverse(int array[][WIDTH]) { int *p, *endp; p=&array[0][0]; endp=&array[HEIGHT-1][WIDTH-1]; while(p<=endp) { if(*p==0) {*p=255;} else if(*p==255) {*p=0;} p++; } } | cs |
반응형
'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글
생명 게임(game of life - John H. Conway) (0) | 2017.01.13 |
---|---|
2차원 배열 복사 (0) | 2017.01.06 |
학생 성적 평균 구하기 (0) | 2017.01.06 |
내림차순 정렬 (0) | 2017.01.06 |
가장 큰 값 (0) | 2017.01.05 |