티스토리 뷰
안녕하세요!
오늘은 raw파일에 대해 색반전, 밝기조절 하는 방법에 대해 알아보겠습니다.
( 1차원 배열 메모리할당 방법을 이용하겠음. )
먼저,
앞 글을 먼저 보고 오시는 것을 추천드립니다.
각각의 픽셀값은 unsigned char형으로 0~255의 값이 들어갈 수 있는데요.
0 = 검은색
255 = 흰색
을 나타내는 것을 알아두어야 합니다.
● 색 반전
흑백 이미지에서 색을 반전시킨다는 것은
검은색을 흰색으로, 흰색을 검은색으로 바꾼다는 것을 의미합니다.
결론부터 말하자면 아래의 코드와 같습니다.
unsigned char pix; // pix = 임의의 픽셀 값 ( 0 ~ 255 )
unsigned char Ipix = 255 - pix; // pix에 대한 반전 픽셀 값
255에서 임의의 픽셀값을 빼주면 됩니다.
색 반전 코드
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define VER 512
#define HOR 512
#define F_SIZE (VER*HOR)
unsigned char * alloc_pic(int SIZE); // 1차원 배열 메모리 생성 함수
int main()
{
int i, j;
unsigned char * ori_pic = alloc_pic(F_SIZE);
unsigned char * modi_pic = alloc_pic(F_SIZE);
FILE *fin, *fout1;
fin = fopen("Lena_512.raw","rb"); // 읽기 모드로 스트림 생성
fout1 = fopen("Inverse_Lena","wb"); // 쓰기 모드로 스트림 생성
if(!fin) {printf("ERROR :: File Can't Read\n"); exit(1);} // 파일을 읽을 수 없습니다.
if(!fout1) {printf("ERROR :: File Can't Save\n"); exit(1);} // 파일을 저장할 수 없습니다.
fread(ori_pic, sizeof(unsigned char), F_SIZE, fin); // "Lena_512.raw" 에 있는 데이터를 ori_pic에 저장
for( i = 0; i < F_SIZE; i++) {
modi_pic[i] = 255 - ori_pic[i]; // 각각의 픽셀들에 대한 색 반전
}
fwrite(modi_pic, sizeof(unsigned char), F_SIZE, fout1); // modi_pic에 있는 색 반전 데이터를 "Inverse_Lena_512.raw"에 쓰기
fclose(fin);
fclose(fout1);
free(ori_pic);
free(modi_pic);
printf("success");
return 0;
}
/*** 1차원 배열 메모리 할당 function ***/
unsigned char * alloc_pic (int SIZE)
{
unsigned char * pic;
if((pic=(unsigned char*)calloc(SIZE,sizeof(unsigned char))) == NULL) {
printf("\n malloc_picture : Picture structure \n");
exit(1);
}
return pic;
}
● 밝기 조절
더 밝게 만들고 싶다면, 255에 더 가깝게
더 어둡게 만들고 싶다면, 0에 더 가깝게 만들어주는 것 입니다.
만약 픽셀값이 50만큼 더 밝게 만들고 싶다면
1 -> 51
152 -> 202
모든 픽셀 값에 대해서 50을 더해주면 됩니다.
여기서, 픽셀값이 240이라면 어떡할까요?
240 -> 290 ( X ) unsigned char의 범위를 벗어나게 됩니다.
따라서
205 ~ 255 까지의 값은 전부 255으로 저장해주시면 되겠습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define VER 512
#define HOR 512
#define F_SIZE (VER*HOR)
unsigned char * alloc_pic(int SIZE); // 1차원 배열 메모리 생성 함수
int main()
{
int i, j;
unsigned char * ori_pic = alloc_pic(F_SIZE);
unsigned char * modi_pic = alloc_pic(F_SIZE);
FILE *fin, *fout2, *fout3;
fin = fopen("Lena_512.raw","rb"); // 읽기 모드로 스트림 생성
fout2 = fopen("Up_50_Lena_512.raw","wb"); // 쓰기 모드로 스트림 생성
fout3 = fopen("Down_50_Lena_512.raw","wb"); // 쓰기 모드로 스트림 생성
if(!fin) {printf("ERROR :: File Can't Read\n"); exit(1);} // 파일을 읽을 수 없습니다.
if(!fout2) {printf("ERROR :: File Can't Save\n"); exit(1);} // 파일을 저장할 수 없습니다.
if(!fout3) {printf("ERROR :: File Can't Save\n"); exit(1);} // 파일을 저장할 수 없습니다.
fread(ori_pic, sizeof(unsigned char), F_SIZE, fin); // "Lena_512.raw" 에 있는 데이터를 ori_pic에 저장
/*** 50만큼 밝게 ***/
for( i = 0; i < F_SIZE; i++){
if( ori_pic[i] > 205) { // 기존 픽셀값이 205보다 크다면
modi_pic[i] = 255; // modi_pic[i]를 255으로 고정
}
else{ modi_pic[i] = ori_pic[i] + 50; } // 아니면 +50
}
fwrite(modi_pic, sizeof(unsigned char), F_SIZE, fout2); // modi_pic에 있는 데이터를 "Up_50_Lena_512.raw"에 쓰기
/*** 50만큼 어둡게 ***/
for( i = 0; i < F_SIZE; i++){
if( ori_pic[i] < 50) { // 기존 픽셀값이 50보다 작다면
modi_pic[i] = 0; // modi_pic[i]를 0으로 고정
}
else{ modi_pic[i] = ori_pic[i] - 50; } // 아니면 -50
}
fwrite(modi_pic, sizeof(unsigned char), F_SIZE, fout3); // modi_pic에 있는 데이터를 "Down_50_Lena_512.raw"에 쓰기
fclose(fin);
fclose(fout2);
fclose(fout3);
free(ori_pic);
free(modi_pic);
printf("success");
return 0;
}
/*** 1차원 배열 메모리 할당 function ***/
unsigned char * alloc_pic (int SIZE)
{
unsigned char * pic;
if((pic=(unsigned char*)calloc(SIZE,sizeof(unsigned char))) == NULL) {
printf("\n malloc_picture : Picture structure \n");
exit(1);
}
return pic;
}
● 결과
잘 알려진 Lena.raw파일 (흑백)을 이용해 색반전 및 밝기 조절을 하겠습니다.
색 반전 코드 결과
색 밝기 조절 코드 결과
이로써 색 반전과, 밝기 조절을 성공했습니다!
'C언어' 카테고리의 다른 글
[C언어] 3-2. raw파일을 bmp파일로 변환하기 (0) | 2024.11.11 |
---|---|
[C언어] 3-1. bmp파일을 raw파일로 변환하기 (4) | 2024.11.10 |
+BMP파일 뜯어보기 (1) | 2024.11.09 |
[C언어] 2.기본적인 영상처리(2) (3) | 2024.11.08 |
[C언어] 1. raw파일 복사하는 방법 (7) | 2024.11.07 |
- Total
- Today
- Yesterday
- 회전이동
- 현대대수학
- RAW
- bias
- errorcorrecting
- DEEPLEARNING
- 정보전송
- sungroup
- activationfunction
- 영상처리 #기초
- raw회전이동
- MLP
- 활성화함수
- 신경망딥러닝
- perceptron
- 의류분류
- rawtobmp
- generator
- BMP
- 티스토리챌린지
- errordetecting
- 편향
- bmptoraw
- bmp헤더
- klein4group
- fashionMNIST
- 퍼셉트론
- 오블완
- 다층퍼셉트론
- cyclicgroup
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |