라즈베리파이에서 Processing을 이용한 영상처리_영상처리기초

메카 2017-03-16 (목) 18:11 4년전 3277  

3장 프로세싱을 이용한 영상처리 기초

 

1. 픽셀 이해하기

현대는 디지털 시대이다. 우리가 사용하고 있는 모니터는 디지털로 되어있다. 디지털 화면은 각각의 한 개를 여러 개 묶어서 만들어진 것이다. 이때 한 개의 단위가 픽셀이다. 즉 픽셀을 여러 개 묶어서 우리가 사용하고 있는 것이다. 그래서 디지털 화면은 픽셀이라고 하는 작은 사각형으로 구성되어 있는 것이다. 쉽게 말하면 컴퓨터 화면은 모눈종이처럼 되어 있다고 생각하면 된다. 그러므로 컴퓨터에 도형을 그리는 것은 모눈종이에 도형을 그리는 것으로 이해하면 된다. 가장 작은 구성 요소인 픽셀은 모눈종이가 좌표를 가지고 있는 것처럼 각각 좌표 값을 가지고 있다. 화면이 가로 100픽셀 및 세로 100픽셀이라면 좌표는 (0, 0)부터 (99, 99)까지 표시 할 수 있다. 좌표는 (0,0)부터 시작되므로 화면 크기가 100x100 픽셀일 때 마지막 위치를 (99, 99)라는 좌표로 표시할 수 있다. 화면에서 가로를 X, 세로를 Y축으로 사용하므로 화면의 왼쪽 위가 (0, 0)이 된다. [그림 3-1]은 픽셀의 위치가 표시된 좌표를 나타낸다.

32c0322f854e201bfaa595bd77111dcf_1489708
 

[그림 3-1] 픽셀 좌표 이해하기

 

2. 영상 화면에 그리기

프로세싱은 멀티미디어 분야에서 시작된 프로그램이므로 C/C++보다 훨씬 간단하게 불러올 수 있다. 근래에는 OpenCV 혹은 MatLab에서도 간단한 명령어에 의해 불러온다. 그러나 OpenCV인 경우는 환경 설정을 해야 하는 번거로움이 있으며, MatLab의 경우는 여러 기능이 있으므로 프로그램이 비싸고 자체의 무게고 상당하다. 앞 절에도 언급했지만 프로세싱의 경우는 영상을 불러오는 것이 아니라 모니터 화면에 영상을 그리는 것이다. 프로세싱에서 지원하는 영상의 종류는 JPG, GIF, TGA 그리고 PNG 이다. 파일로부터 불러온 영상을 저장하기위해 PImage 클래스를 사용하여 변수를 지정한다. PImage 클래스를 이용하여 불러온 영상은 width(가로)height(세로)의 속성을 가지고 있다. 영상을 불러오는 명령어는 loadImage() 함수이다. 괄호 안의 겹따옴표(“ ”) 내에 그리고자 하는 파일 이름을 넣으면 된다. 영상을 그리는 소스코드는 아래와 같다.

 

 

 

 

a) 소스 코드 -1

 PImage img;

void setup()

{

size(640,480);

img=loadImage(“TestImage1.jpg”);

}

void draw()

{

background(0);

image(img,0,0,img.width,img.height);

}

 

32c0322f854e201bfaa595bd77111dcf_1489708
 

소스코드-1의 결과를 [그림 3-1]에 나타내었다.

출력청은 image()함수를 이용하여 화면에 불러온 영상을 그린다. image()함수에서 첫 번째는 저장된 영상 변수이며, 두 번째와 세 번째는 출력창에서 영상의 시작 위치를 나타내며, 네 번째와 다섯 번째는 출력창에 나타낼 영상의 가로와 세로 크기를 의미한다. 네 번째와 다섯 번째는 없어도 된다. size()함수가 없다면 [그림 3-2]처럼 가장 기본적인 크기의 출력창에 영상의 왼쪽 윗부분만 나타난다.

 

a) 소스 코드 -2

 PImage img;

void setup()

{

size(300,200);

String url = "https://processing.org/img/processing-web.png";

img=loadImage(url, "png");

}

void draw()

{

background(0);

image(img,0,0);

}

 

 

 

32c0322f854e201bfaa595bd77111dcf_1489708

 

 

 

많이는 사용하지 않지만 url를 사용 할 경우 string 형태의 변수를 이용하여 주소를 입력하며 loadImage()내에 문자열 변수와 영상 타입(“ ” 이용)을 넣어서 사용한다. 결과 영상을 [그림 3-3]에 나타내었다.

 

 

a) 소스 코드 -3

이번 실험은 출력창에서 영상의 시작위치를 변경하고자 한다. image()함수에서 “0,0” 대신 “100, 100”을 입력한다. X축으로 100 픽셀 이동하고 Y축으로 100픽셀 이동하여 그 위치를 시작 위치로 하라는 의미이다. size()함수에서 크기가 작을 경우 나머지는 무시하게된다. 실험 결과를 [그림 3-4]에 나타내었다.

 

 

 

 

 

 

b) 결과

32c0322f854e201bfaa595bd77111dcf_1489708
 

[그림 3-1] 소스코드-1 결과 영상

 

32c0322f854e201bfaa595bd77111dcf_1489708
 

[그림3-2] size()함수를 사용하지 않은 결과 영상

32c0322f854e201bfaa595bd77111dcf_1489708
 

[그림3-3] url를 사용한 결과 영상

32c0322f854e201bfaa595bd77111dcf_1489708
 

[그림3-4] 시작 위치를 (100,100)으로 한 결과 영상

 

메카리워즈 Image Map


모바일 버전으로 보기