|
안녕하세요.
비트맵 파일 외각선 추출에 관해서 질문이 있어서 이렇게 질문드립니다.
비트맵 파일을 불러와서 외각선을 추출해야 합니다.
그래서 bmp 파일 rgb 값을 사용하여 외각선을 추출하려고 합니다.
방법은 우선 배경은 하얀색이라는 가정을 두고 시작했습니다.
배경이 하얀색이기 때문에 하얀색 이외의 색은 모두 검은색으로 만듭니다.
그리고 rgb 값을 읽어 하얀색 rgb 값 다음 rgb 값이 검은색이면
그 곳이 경계선이 되게 했습니다.
그런데 약간의 문제가 있는지 생각 처럼 잘 되지 않습니다.
무엇이 잘 못 되었는지 봐주시면 감사하겠습니다.
/*
비트맵 파일 이미지를 불러와서 그 이미지에 외각선을 추출한다.
그 이미지에 배경색은 하얀색이다.
*/
#include <stdio.h>
#define BYTE unsigned char
#define MAX 1000 // 비트맵에 크기를 자동으로 계산 하는 방법을 모르겠습니다.
struct BMP_DATA // 비트맵 RGB값
{
BYTE r;
BYTE g;
BYTE b;
};
void main()
{
static struct BMP_DATA rgb[MAX];
int i = 0;
FILE *fp;
fp = fopen ("test.bmp", "w");
while (i < MAX) // 비트맵 배경이 하얀색이지만 완전 하얀색이 아닐수 있으므로 완전 하얀색을 만든다.
{
if (rgb[i].r > 220)
{
rgb[i].r = 255;
}
if (rgb[i].g > 220)
{
rgb[i].g = 255;
}
if (rgb[i].b > 220)
{
rgb[i].b = 255;
}
i++;
}
while (i < MAX) // 배경이 아니라면 검은색으로 바꾼다.
{
if (rgb[i].r != 255)
{
rgb[i].r = 0;
}
if (rgb[i].g != 255)
{
rgb[i].g = 0;
}
if (rgb[i].b != 255)
{
rgb[i].b = 0;
}
i++;
}
while (i < MAX) // 하얀색 다음 검은색이라면 그 곳이 경계 이므로 색을 바꾼다.
{
if (rgb[i].r == 255 || rgb[i].g == 255 || rgb[i].b == 255)
{
if (rgb[i+1].r == 0 || rgb[i+1].g == 0 || rgb[i+1].b == 0)
{
rgb[i].r = 100;
rgb[i].g = 100;
rgb[i].b = 100;
}
}
i++;
}
fclose(fp);
}
|