Raw 이미지를 읽고 복사 저장해 보았습니다. https://mynameisoh.tistory.com/25
[영상처리/C언어] Raw 포맷의 이미지 읽기
C를 활용해서 디지털 영상 처리와 관련한 가벼운 주제로 공부할 계획입니다. IDE는 Visual Studio를 활용합니다. 이번 포스팅의 주제는 raw 파일 이미지 읽기 및 복사입니다. raw 포맷은 다른 bmp,jpg,gif,p
mynameisoh.tistory.com
이번에는 읽고 색 반전, 밝기 조절, 회전을 통한 이미지 변환을 실습해 보겠습니다.
우리가 raw 파일 부터 1차원의 픽셀 value 정보를 획득 할 수 있습니다. gray 스케일의 이미지이므로 픽셀의 메모리 크기는 1byte = 8bit --> 256개의 정수 값으로 표현할 수 있습니다. 디지털 영상은 0 ~ 255 정수값으로 픽셀의 value를 표현합니다.
색 반전
0~255 값을 가지고 있기 때문에 최대값인 255에서 현재 value 값을 빼주면 반전된 색을 값을 획득 할 수 있습니다.
for (j = 0; j < VER; j++)
{
fread(ori_pic_2d[i], sizeof(unsigned char), HOR, fin1); // 원본 영상
for (i = 0; i < HOR; i++)
{
modi_pic_2d_color[j][i] = 255 - ori_pic_2d[j][i]; // 반전 영상
}
}
색 밝기 조절
색 밝기 조절도 반전과 마찬가지 입니다. 0 ~ 255 값 사이에서 원본 픽셀의 value에 값을 더해주거나 빼주면 명암의 변화가 생깁니다. 주의할 점은 unsigned char 자료형은 0~255 값만 가지므로 255의 크거나 0보다 작은 값들은 다른 값들로 변경됩니다. 따라서 255 값보다 큰 값은 255로, 0보다 작은 값들은 0값으로 고정해 주는 과정이 필요합니다. 삼항 연산자를 통해 이를 처리해 줍니다.
for (j = 0; j < VER; j++)
{
fread(ori_pic_2d[i], sizeof(unsigned char), HOR, fin1);
for (i = 0; i < HOR; i++)
{
int new_val = N + ori_pic_2d[j][i]; // N은 색 밝기 조절 변수
new_val = new_val > 255 ? 255 : (new_val < 0) ? 0 : new_val;
modi_pic_2d_bright[j][i] = new_val;
}
}
회전, 위치 변환
회전 변환은 간단하게 실습해 보겠습니다. 각도를 설정해서 회전 시키는 경우 padding과 같은 과정이 필요하므로, 90, 180, 270, 상하 반전, 좌우 반전에 대한 코들르 실습해 봅니다.
j는 row, i는 colum의 index를 의미합니다. 이번에는 픽셀의 value 보다 픽셀의 위치가 중요한 작업이므로 왜 젏게 index가 구성되어야 하는지 잘 이해해 봐야합니다.
for (j = 0; j < VER; j++)
{
fread(ori_pic_2d[i], sizeof(unsigned char), HOR, fin1);
for (i = 0; i < HOR; i++)
{
modi_pic_2d_rotate90[j][i] = ori_pic_2d[(VER - 1) - i][j]; // 90도 변환
modi_pic_2d_rotate180[j][i] = ori_pic_2d[(VER-1) - j][(HOR-1)-i]; // 180도 변환
modi_pic_2d_rotate270[j][i] = ori_pic_2d[i][(VER - 1) - j]; // 270도 변환
modi_pic_2d_rotateTOP[j][i] = ori_pic_2d[(VER-1)-j][i]; // 상하 반전
modi_pic_2d_rotateLeft[j][i] = ori_pic_2d[j][(HOR-1)-i]; // 좌우 반전
}
}
ㄷ