본문 바로가기
IT/OpenCV

OpenCV 함수 정리

by Jang HyunWoong 2014. 12. 19.

IplImage 구조체 멤버명

 

 nChannels : 영상의 픽셀 당 채널 수를 나타내며 1~4 값이며 흑배영상의 채널의 수는 1이고 RGB 컬러영상의 채널의 수는 3이고 RGB 컬러순서는 다음과 같다.

 

b0

g0

r0

b1

g1

r1

b2

g2

r2

b3

g3

r3

 

● origin : 영상의 원점을 나타낸다. 0은 top-left origin, 1은 bottom-left origin을 의미한다다음은 Opencv에서 origin이 나타내는 상수이다.

 

origin

설명

IPL_ORIGIN_TL (0)

TL은 Top Left의 약자이며 왼쪽 상단을 나타낸다.

IPL_ORIGIN_BL (1)

BL은 Bottom Left의 약자이며 왼쪽 하단을 나타낸다.

 

● depth : 영상데이터를 저장하기위해 사용되는 비트의 수를 나타낸다. depth는 컴퓨터 언어에서 자료형(data type)과 같이 예를 들어, C언어에서 정수형에 int형과 long형이 있고 실수형에 float과 double이 있듯이 데이터를 몇 비트를 가지고 표현할 것인가를 나타낸다.

다음은 OpenCV에서 depth를 나타나는 상수이다.

 

depth

설명

IPL_DEPTH_8U

8비트 unsigned integer (0~255)

IPL_DEPTH_8S

8비트 signed integer (-128~127)

IPL_DEPTH_16U

16비트 unsigned integer

IPL_DEPTH_16S

16비트 signed integer

IPL_DEPTH_32S

32비트 signed integer

IPL_DEPTH_32F

32비트 floating-point number

IPL_DEPTH_64F

64비트 floating-point number

 

만약 흑백영상에서 depth가 IPL_DEPTH_8U이면 색상 데이터를 0~255사이의 정수로 나타내고 IPL_DEPTH_32F이면 32비트 실수로 표현하겠다는 뜻이다마찬가지로 RGB 컬러영상에서 depth가 IPL_DEPTH_8U이면 각 채널 당 색상 데이터를 0~255사이의 정수로 나타내고 IPL_DEPTH_32F이면 각 채널 당 32비트 실수로 표현하겠다는 뜻이다.

 

 width : 영상의 가로크기를 나타내며 단위는 픽셀이다.

 

● height : 영상의 세로크기를 나타내며 단위는 픽셀이다.

 

● widthStep : 영상에서 가로 크기를 나타내며 단위는 바이트이다. widthStep = width * nChannels이다. 8비트 1채널 영상에서 영상의 가로크기가 100픽셀이면 widthStep = 100 * 1인 100 바이트이고 8비트 3채널 영상에서 영상의 가로크기가 100픽셀이면 widthStep = 100 * 3인 300바이트가 된다.

 

● imageSize : 영상의 크기를 나타내며 단위는 바이트이다. imageSize = width * height * nChannels이다가로 256픽셀세로 256픽셀인 흑백영상에서 imageSize는 65,536 바이트 (256픽셀 * 256픽셀 * 1채널 = 65,536바이트)이고 가로 256픽셀세로 256픽셀인 컬러영상에서 imageSize는 196,608바이트 (256픽셀 * 256픽셀 *3채널 = 196,608바이트)가 된다.

 

● imageData : 256 * 256 흑백영상에서 첫 픽셀의 데이터는 imageData[0], 두 번째 픽셀의 데이터는 imageData[1], 마지막 픽셀의 데이터는 imageData[65535]에 들어 있다다음은 흑백영상에서 6개 픽셀에 저장된 픽셀값들을 보여주고 있다.

 

imageData[0]

imageData[1]

imageData[2]

imageData[3]

imageData[4]

imageData[5]

100

120

150

130

140

160

 

컬러영상에서 픽셀에 저장되는 채널의 순서는 BGR 순서에 따라 영상 데이터가 저장된다다음은 컬러영상에서 2개의 픽셀에 저장된 픽셀값들을 보여주고 있다.

 

imageData[0]

imageData[1]

imageData[2]

imageData[3]

imageData[4

imageData[5]

100

120

150

130

140

160

 

여기서는 (B, G, R)이 (100, 120, 150) 혹은 (130, 140, 160)에 의해 각각 다른 두 가지 컬러 색을 나타낸다.

 

영상 읽기

 

 cvLoadImage 함수

 

영상을 메모리 상에 로드하는데 사용되는 함수이다.

 

IplImage* cvLoadImage( char * filename, int iscolor );

 

● filename

로드되는 파일의 이름을 가리킨다.

 

● iscolor

로드되는 영상의 색상을 가리킨다.

iscolor > 0이면 3채널 컬러 영상으로 변환하여 로드한다.

iscolor = 0이면 흑백 영상으로 변환하여 로드한다.

iscolor < 0이면 원래의 영상 그대로 로드한다원래 영상이 3채널 컬러영상은 컬러영상으로 흑백영상은 그대로 흑백영상으로 로드한다예를 들어다음은 Lena 컬러영상을 컬러영상 그대로 메모리 상에 로드한다.

 

IplImage* image;

image = cvLoadImage("../images/Lena.jpg", -1);

 

만약에 컬러영상을 흑백영상으로 변환하여 로드하고자 하는 경우는 다음과 같다.

 

IplImage* image;

image = cvLoadImage("../images/Lena.jpg", 0);

 

Opencv에서 지원되는 파일의 종류

 

파일

설명

BMP, DIB

Windows 비트맵

JPEG, JPG, JPE

JPEG 파일

PNG

Portable Network Graphics

PBM, PGM, PPM

Portable 영상 포맷

SR, RAS

Sun rasters

TIFF, TIF

TIFF 파일

영상 출력

 

● cvNamedWindow 함수

 

영상을 출력하기 위한 윈도우를 만들기 위해 사용되는 함수이다.

 

int cvNamedWindow(char* name, int flags;

 

● name

윈도우의 이름을 나타낸다.

 

 flags

윈도우의 크기조절을 나타내기 위한 플래그이다플래그가 CV_WINDOW_AUTOSIZE이면 윈도우의 크기는 자동으로 출력할 영상의 크기에 맞춘다. CV_WINDOPW_AUTOSIZE 대신 1을 사용할 수 있다이 경우 출력된 윈도우의 크기를 사용자가 마우스를 가지고 크기 조절을 할 수 없다플래그가 0인 경우 사용자가 마우스로 크기 조절을 할 수 있다.

 

● cvShowImage 함수

 

cvNamedWindow() 함수에 의해 지정된 윈도우에 영상을 출력하기 위해 사용하는 함수이다.

 

void cvShowImage(char* name, CvArr* image);

 

 name

윈도우의 이름이며 cvNamedWindow() 함수에 의해 지정된 이름과 동일하다.

 

 Image

출력할 영상을 나타내며 cvLoadImage() 함수에 의해 로드된 영상을 지정한다.

 

● cvWaitKey 함수

 

키보드로부터 키 입력을 기다리기 위한 함수이다.

 

int cvWaitKey(int delay);

 

 delay

지정된 시간(단위 : milliseconds) 동안 기다린다.

cvWaitKey() 함수는 영상을 화면에 출력할 때 출력되는 시간을 지정하기 위해 사용한다. delay ≤ 0인 경우 예를 들어, cvWaitKey(0)이면 영상이 출력된 상태에서 무한히 키보드 입력을 기다리다 키를 입력하면 입력된 키의 코드를 반환한다. cvWaitKey(1000)임녀 1초 동안 기다리고 cvWaitKey(10000)이면 10초동안 기다린다만약 지정된 시간동안 키보드로부터 사용자가 키를 입력하지 않으면 -1을 반환한다.

 

 cvReleaseImage 함수

 

cvLoadImage() 함수를 이용하여 메모리에 로드된 영상이 메모리로부터 해제하기 위해 사용하는 함수이다.

 

void cvReleaseImage( IplImage** image);

 

 image

image는 IplImage 구조체의 이중 포인터이다따라서 포인터 변수 image가 수록되어 있는 주소를 가리키므로 &image로서 나타낸다다음은 Lena 영상을 메모리에 로드하고 로드된 영상을 메모리에서 해제하는 예이다.

 

IplImage* image;

image = cvLoadImage("../images/Lena.jpg", -1);

cvReleaseImage(&image);

 

● cvCreateImage 함수

 

영상을 만들기 위해 사용하는 함수이다.

 

IplImage* cvCreateImage( cvSize size, int depth, int channels);

 

● size

영상의 크기를 지정한다영상의 크기는 cvSize() 함수와 cvGetSize() 함수를 사용하여 지정한다영상의 가로와 세로 길이를 직접 지정하고자 하는 경우는 cvSize() 함수를 사용하여 cvSize(width, height)처럼 지정하고 특정한 영상의 크기와 똑같은 크기의 영상을 만들고자 하는 경우는 cvGetSize() 함수를 사용하여 cvGetSize(src_image)처럼 지정한다.

 

 depth

영상 데이터의 깊이(단위:비트)를 지정한다. 1채널 영상인 경우는 픽셀의 깊이가 되고 3채널 영상인 경우 각 채널의 깊이가 된다.

 

depth

설명

IPL_DEPTH_8U

8비트 unsigned integer (0~255)

IPL_DEPTH_8S

8비트 signed integer (-128~127)

IPL_DEPTH_16U

16비트 unsigned integer

IPL_DEPTH_16S

16비트 signed integer

IPL_DEPTH_32S

32비트 signed integer

IPL_DEPTH_32F

32비트 floating-point number

IPL_DEPTH_64F

64비트 floating-point number

 

● channels

픽셀 당 채널 수를 지정한다.

예를 들어영상의 크기 640 * 480인 흑백영상을 만들고자 하는 경우 흑백영상은 1채널이므로 다음과 같다.

 

IplImage* image = cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 1);

 

여기서 채널의 깊이는 8비트로 지정하고 있다, 0과 255사이 256개의 정수값으로 표현하겠다는 의미이다만약에 영상의 크기 640 * 480인 컬러영상을 만들고자 하는 경우 RGB 컬러영상은 3채널이므로 다음과 같다.

 

IplImage* image = cvCreateImage(cvSize(640,480), IPL_DEPTH_32F, 3);

 

여기서는 각 채널의 깊이는 32비트로 지정하고 있다비록 컬러영상이지만 각 채널의 깊이를 흑백영상처럼 8비트로 다음과 같이 지정할 수도 있다.

 

IplImage* image = cvCreateImage(cvSize(640,480), IPL_DEPTH_8U,3);

 

 cvSplit 함수

 

다채널 영상을 단일 채널 영상으로 분리하고자 하는 경우 사용하는 함수이다.

 

void cvSplit( CvArr* src, CvArr* dst0, CvArr* dst1, CvArr* dst2, CvArr* dst3);

 

● src

다채널 영상을 나타낸다.

 

● dst0, dst1, dst2, dst3

단일 채널 영상을 나타낸다.

영상 저장

 

● cvSaveImage 함수

 

영상을 파일에 저장하기 위한 함수이다.

 

int cvSaveImage( char* filename, CvArr* image);

 

● filename

저장할 파일이름을 나타낸다.

 

● image

저장할 영상을 가리킨다.

다음은 cvSaveImage() 함수의 사용 예를 보여준다.

 

IplImage* image;

cvSaveImage("../images/Lena.jpg", image);

 

산술연산

 

단일 영상에서 산술연산

 

● cvAddS 함수

 

영상에 상수값을 더하기 위해 사용하는 함수이다.

 

void cvAddS( CvArr* src, CvScalar value, CvArr* dst, CvArr* mask(NULL) );

 

● src

원 영상을 나타낸다.

 

● value

더하고자 하는 상수값을 지정한다상수값은 CvScalar 자료형을 갖는 CV_RGB와 cvScalarAll() 함수를 사용하여 지정한다. CV_RGB를 사용하여 지정하는 경우 예를 들어흑백영상에서 임의의 픽셀에 100을 더하고자 하는 경우 상수값은 CV_RGB(100, 100, 100)처럼 지정하고 컬러영상에서 RGB 각 채널에 상수값 100, 110, 120을 더하고자 하는 경우 상수값은 CV_RGB(100, 100, 120)처럼 지정하면 된다.

 

● dst

목적 영상을 나타낸다.

 

● mask

마스크를 지정한다마스크를 사용하지 않는 경우 NULL로 지정한다.

예를 들어원 영상 src에 60을 더하여 목적영상 dst를 얻고자 하는 rsuddn 다음과 같다

 

cvAddS(src, CV_RGB(60, 60, 60), dst, NULL);

 

● cvSubS 함수

 

영상에 상수값을 빼기 위해 사용하는 함수이다.

 

void cvSubS( CvArr* src, CvScalar value, CvArr* dst, CvArr* mask(NULL) );

 

● src

원 영상을 나타낸다.

 

● value

빼고자 하는 상수값을 지정한다.

 

● dst

목적 영상을 나타낸다.

 

● mask

마스크를 지정한다마스크를 사용하지 않는 경우 NULL로 지정한다.

예를 들어원 영상 src에 60을 빼서 목적영상 dst를 얻고자 하는 경우 다음과 같다.

 

cvSubS(src, CV_RGB(60, 60, 60), dst, NULL);

 

● cvMul 함수

 

두 영상 간의 곱셈을 수행하는 함수이다.

 

void cvMul( CvArr* src1, CvArr* src2, CvArr* dst, double scale=1 );

 

● src1

첫 번째 영상을 나타낸다.

 

● src2

두 번째 영상을 나타낸다.

 

 

● dst

목적영상을 나타낸다.

 

● scale

곱하고자 하는 상수를 나타낸다.

 

cvMul() 함수는 dst = scale * src1 * src2를 수행한다따라서 cvMul() 함수를 이용하여 우리가 원하는 한 영상에서 상수값 곱셈을 수행하기 위해서는 두 번째 영상 src2를 픽셀값이 전부 1인 단위 영상으로 만들어 사용한다. Opencv에서 제공하는 cvSet() 함수를 사용하여 임의의 영상을 단위영상으로 만들 수 있다.

 

 cvSet 함수

 

행렬 혹은 영상을 주어진 원소 혹은 픽셀값으로 채우기 위해 사용하는 함수이다.

 

void cvSet( CvArr* arr, CvScalar value, CvArr* mask=NULL );

 

● arr

목적영상을 나타낸다.

 

 value

채우고자 하는 상수이며 상수값은 cvScalar 자료형을 갖는 CV_RGB와 cvScalarAll() 함수를 사용하여 지정한다. cvScalarAll() 함수를 사용하여 예를 들어, 0 혹은 255로 채우고자 하는 경우 cvScalarAll(0) 혹은 cvScalarAll(255)처럼 사용하면 된다.

 

● mask

마스크를 지정한다마스크를 사용하지 않는 경우 NULL로 지정한다.

 

두 영상간의 산술연산

 

● cvAdd 함수

 

두 영상 간의 덧셈을 수행하는 함수이다.

 

void cvAdd( CvArr* src1, CvArr* src2, CvArr* dst, CvArr* mask=NULL);

 

● src1

첫 번째 영상을 나타낸다.

 

● src2

두 번째 영상을 나타낸다.

 

● dst

목적영상을 나타낸다.

 

● mask

마스크를 지정한다마스크를 사용하지 않는 경우 NULL로 지정한다.

cvAdd() 함수는 dst = src1 + src2를 수행한다.

 

● cvSub 함수

 

두 영상 간의 뺄셈을 수행하는 함수이다.

 

void cvSub( CvArr* src1, CvArr* src2, CvArr* dst, CvArr* mask=NULL );

 

● src1

첫 번째 영상을 나타낸다.

 

● src2

두 번째 영상을 나타낸다.

 

● dst

목적영상을 나타낸다.

 

● mask

마스크를 지정한다마스크를 사용하지 않는 경우 NULL로 지정하낟.

cvSub() 함수는 dst = src1 - src2를 수행한다.

 

● cvDiv 함수

 

두 영상 간의 나눗셈을 수행하는 함수이다.

 

void cvDiv( CvArr* src1, CvArr* src2, CvArr* dst, double scale=1 );

 

● src1

첫 번째 영상을 나타낸다.

 

● src2

두 번째 영상을 나타낸다.

 

● dst

목적영상을 나타낸다.

 

● scale

곱하고자 하는 상수를 나타낸다.

cvDiv() 함수는 dst = scale * (src1/src2)를 수행한다.

 

영상 반전

 

● cvNot 함수

 

반전 영상을 얻기 위해 사용하는 함수이다.

 

void cvNot( CvArr* src, CvArr* dst );

 

● src

원영상을 나타낸다.

 

● dst

목적영상을 나타낸다.

cvNot() 함수는 dst = ~ src를 수행한다.

 

이진영상

 

● cvThreshold 함수

 

영상에서 이진화하기 위한 함수이다.

 

cvThreshold( CvArr* src, CvArr* dst, double threshold, double maxValue, CvThreshType type );

 

● src

원영상을 나타낸다.

 

● dst

결과영상을 나타낸다.

 

● threshold

임계값을 나타낸다.

 

● maxValue

픽셀의 최대 명암값을 나타낸다.

 

● type

이진화 방식을 결정한다.

 

이진화 방식

설명

CV_THRESH_BINARY

임계값 초과 : 255, 임계값 이하 : 0

CV_THRESH_BINARY_INV

임계값 초과 : 0, 임계값 이하 : 255

CV_THRESH_TRUNC

임계값 초과 임계값임계값 이하 원래 픽셀값

CV_THRESH_TOZERO

임계값 초과 원래 픽셀값임계값 이하 : 0

CV_THRESH_TOZERO_INV

임계값 초과 : 0, 임계값 이하 원래 픽셀 값

영상 변환

 

● cvCvtColor 함수

 

컬러영상을 다른 영상으로 변환하는데 사용하는 함수이다.

 

void cvCvtColor( CvArr* src, CvArr* dst, int code );

 

● src

원 영상을 나타낸다.

 

● dst

목적 영상을 나타낸다.

 

● code

컬러 변환 모드이고 다음의 형식에 의해 변환하고자 하는 모드를 지정하면 된다.

 

CV_<src_color_space>2<dst_color_space>

 

여기서 <src_color_space>과 <dst_color_space>은 다음 중 하나이다.

 

RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS

 

예를 들어, RGB 컬러영상을 흑백영상으로 변환하기 위해서는 다음과 같다.

 

cvCvtColor(src_image, dst_image, CV_RGB2GRAY);

 

또는 RGB 컬러영상을 HSV 컬러 영상으로 변환하기 위해서는 다음과 같다.

 

cvCvtColor(src_iamge, dst_image, CV_RGB2HSV);

 

영상의 블러링

 

● cvSmooth 함수

 

영상을 스무딩하는데 사용하는 함수이다.

 

void cvSmooth( CvArr* src, CvArr* dst, int smoothtype, int param1, int param2, double param3);

 

● src

원 영상을 나타낸다.

 

● dst

목적영상을 나타낸다.

 

● smoothtype

스무딩 형태를 지정한다.

 

스무딩 형태

설명

CV_BLUR

단순한 블러링을 나타낸다.

param1 * param2 근방영역에 대해 합을 구한 다음 param1 * param2로 나눈다.

CV_GAUSSIAN

가우시안 블러링을 나타낸다.

param1 * param2 근방영역에 대해 가우시안 마스크를 사용한다. param3은 표준편차이다.

CV_MEDIAN

중앙값 블러링을 나타낸다.

param1 * param2 근방영역에 대해 중앙값을 취한다.

 

● param1

마스크의 가로를 나타낸다.

 

● param2

마스크의 세로를 나타낸다.

 

● param3

가우시안 마스크인 경우 표준편차(sigma)를 지정하는데 만약에 param3=0을 지정하면 param3값은 다음과 같다.

 

sigam = (n/2 -1) * 0.3 + 0.8

 

여기서 n은 n * n 마스크에서 n의 값이다.

 

● cvFilter2D 함수

 

사용자가 정의한 마스크를 가지고 영상을 컨벌류션하기 위해 사용하는 함수이다.

 

void cvFilter2D( CvArr* src, CvArr* dst, CvMat* kernel );

 

● src

원 영상을 나타낸다.

 

● dst

목적영상을 나타낸다.

 

● kernel

컨벌류션 할 마스크를 나타내고 cvMat() 함수 및 cvCreateMat() 함수를 사용하여 지정한다단 마스크의 원소들은 1채널 실수형이어야 한다.

 

● cvMat 함수

 

이미 만들어진 행렬을 지정하는 함수이다.

 

CvMat cvMat( int rows, int cols, int type, void* data=NULL );

 

● rows

행렬에서 행의 수를 나타낸다.

 

● cols

행렬에서 열의 수를 나타낸다.

 

● type

행렬 원소의 형태를 지정하며 당므과 같은 형식에 의해 지정한다.

 

CV_<bit_depth>(S|U|F>C<number_of_channels>

 

예를 들어, CV_8UC1은 8-bit unsigned 1채널 행렬이고 CV_32SC2는 32-bit signed 2채널 행렬이다.

 

● data

행렬에 대한 포인터를 나타낸다.

 

영상의 샤프닝

 

OpenCV에서는 영상의 샤프링을 지원하는 함수는 없다우리는 OpenCV의 cvMat() 함수를 사용하여 샤프링 마스크를 정의하고 cvFilter2D() 함수를 사용하여 정의된 마스크를 사용하여 컨벌류션을 수행

에지 검출

 

● cvSobel 함수

 

Sobel 연산자를 이용하여 에지검출을 위한 함수이다.

 

void cvSobel( CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size=3 );

 

● src

원 영상을 나타낸다.

 

● dst

목적영상을 나타낸다.

 

● xorder

방향 미분을 나타낸다.

 

● yorder

방향 미분을 나타낸다.

 

● aperture_size

커널의 크기를 나타낸다.

 

예를 들어, cvSobel(src, dst, 1, 0, 3)이면 방향으로 미분만을 고려한 Soble 방법을 의미하고 cvSobel(src, dst, 0, 1, 3)이면 y방향으로 미분만을 고려한 Sobel 방법을 의미한다그리고 cvSobel(src, dst, 1, 1, 3)이면 방향으로 미분과 방향으로 미분을 고려한 Sobel 방법을 의미한다.

cvSobel() 함수를 사용하는데 주의할 사항은 src가 8비트 영상이면 dst는 16비트 영상이어야 한다따라서 에지 영상을 출력하기 위해서는 다시 8비트 영상으로 변환해야한다이를 위해 cvCVonvertScale() 함수를 사용하여 영상을 변환한다.

 

● cvConvertScale 함수

 

영상을 변환하는데 사용하는 함수이다.

 

void cvConvertScale( CvArr* src, CvArr* dst, double scale=1, double shift=0 );

 

● src

원 영상을 나타낸다.

 

● dst

목적 영상을 나타낸다.

 

● scale

스케일 파라미터를 나타낸다.

 

● shift

이동 파라미터를 나타낸다.

 

cvConvertScale() 함수는 src 영상을 dst 영상으로 변환하는덴 주어진 스케일 파라미터와 이동 파라미터를 가지고 다음과 같이 변환한다.

 

dst = src * scale + shift

 

● cvLaplace 함수

 

라플라시안 연산자를 이용하여 에지검출을 위한 함수이다.

 

void cvLaplace( CvArr* src, CvArr* dst, int aperture_size=3 );

 

● src

원 영상을 나타낸다.

 

● dst

목적영상을 나타낸다.

 

● aperture_size

커널의 크기를 나타낸다.

OpenCV를 이용한 히스토그램

 

● cvCreateHist 함수

 

히스토그램을 정의하는데 사용하는 함수이다.

 

CvHistogram* cvCreateHist( int dims, int* sizes, int type, float** ranges=NULL, int uniform=1 );

 

● dims

히스토그램 차원을 지정한다흑백영상이면 1차원이고 컬러영상이면 3차원이다.

 

● sizes

히스토그램 차원의 크기를 나타내며 배열로 표시한다예를 들어, 1차원 256 흑백영상인 경우 0부터 255까지 256개 막대를 사용하므로 다음과 같이 정의한다.

 

int sizes[1] = {256};

 

그리고 3차원 컬러영상인 경우 각각의 채널은 256개 막대를 사용함으로 다음과 같이 정의한다.

 

int sizes[3] = {256, 256, 256};

 

● type

히스토그램 표현 형식(histogram representation format)을 나타낸다. type = CV_HIST_ARRAY이면 다채널 밀집 배열(multi-dimensional dense array)을 나타내고 type = CV_HIST_SPARSE이면 다채널 희소 배열(multi-dimensional sparse array)을 나타낸다여기서 밀집배열이냐 희소배열이냐는 0인 원소가 많이 포함되면 희소배열이고 그렇지 않으면 밀집배열을 나타낸다.

 

● ranges

히스토그램의 x축 범위를 나타낸다.

 

● uniform

히스토그램에서 막대 간격을 같게 할 것인지 다르게 할 것인지 결정한다.

uniform ≠ 0이면 막대의 간격을 일정 간격으로 한다.

cvCreateHist() 함수는 CvHistogram 구조체를 반환하는데 CvHistogram 구조체의 형식은 다음과 같다.

 

typedef struct CvHistogram

{

int type;

CvArr* bins;

float thresh[CV_MAX_DIM[3]; /* for uniform histograms */

float ** thresh2; /* for non-uniform histograms */

CvMatND mat; /* embedded matrix header for array histograms */

}CvHistogram;

 

● cvCalcHist 함수

 

영상으로부터 히스토그램을 계산하는데 사용하는 함수이다영상에서 cvCreateHist() 함수에 의해 이미 정의된 히스토그램을 계산한다.

 

void cvCalcHist( IplImage** img, CvHistogram* hist);

 

● img

원 영상을 나타낸다.

 

● hist

히스토그램에 대한 포인터를 나타낸다.

 

● cvGetMinMaxHistValue 함수

 

히스토그램데서 막대에 대한 최대 빈도수와 최소 빈도수를 구하는 함수이다.

명암값 들에 대한 최대 빈도수와 최소 빈도수를 구한다.

 

void cvGetMinMaxHistValue( CvHistogram* hist, flaot* value_min, float* value_max);

 

● hist

히스토그램을 나타낸다.

 

● value_min

히스토그램의 최소 빈도수를 나타낸다.

 

● value_max

히스토그램의 최대 빈도수를 나타낸다.

 

● cvScale 함수

 

하나의 배열을 다른 배열로 선형 변환에 의해 변환하는 함수이다.

 

void cvScale( CvArr* src, CvArr* dst, double scale=1, double shift=0);

 

● src

원 영상을 나타낸다.

 

● dst

목적 영상을 나타낸다.

 

● scale

스케일 파라미터를 나타낸다.

 

● shift

이동 파라미터를 나타낸다.

cvScale() 함수는 dst = src * scale + shift에 의해 변환된다참고로 cvScale() 함수는 cvConvertScale() 함수와 동일한 함수이다.

 

● cvRectangle 함수

 

직사각형을 그리기위한 함수이다.

 

void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1 );

 

● img

직사각형이 그려질 영상을 나타낸다

 

● pt1

직사각형의 모서리를 나타낸다.

 

● pt2

직사각형의 반대편 모서리를 나타낸다.

 

● color

직사각형의 선의 색상을 나타낸다.

 

● thickness

직사각형의 선의 두께를 나타낸다.

 

cvRectangle() 함수에서 모서리 좌표 pt1과 pt2를 정할 때 원점 (0, 0)이 어디에 위치하느냐가 중요하다수학좌표에서 원점과 영상에서 원점은 다르기 때문이다.

수학 좌표에서 원점은 왼쪽 하단이나 영상 좌표에서 원점은 왼쪽 상단이다.

 

● cvGetReal1D 함수

 

1차원 히스토그램에서 번째 막대의 빈도수를 얻기 위한 함수이다.

 

double cvGetReal1D( CvArr* arr, int idx0 );

 

● arr

1차원 배열을 의미한다.

 

● idx0

원소의 위치에 대한 인덱스를 나타낸다.

예를 들어, cvGetReal1D(histo->bins, i)는 배열 bins에서 i번째 인덱스에 대한 원소를 반환한다.

 

● cvSet 함수

 

영상을 주어진 값으로 설정할 때 사용하는 함수이다.

 

void cvSet( CvArr* arr, CvScalar value, CvArr* mask=0 );

 

● arr

원 영상을 나타낸다.

 

● value

채울 값을 지정한다.

 

● mask

마스크를 나타낸다.

예를 들어, cvSet( histImage, cvScalarAll(255), 0 )이면 영상 histImage의 픽셀값을 255로 설정한다.

히스토그램 평활화

 

● cvEqualizeHist 함수

 

흑백영상에서 히스토그램 평활화하는데 사용하는 함수이다.

 

void cvEqualizeHist( CvArr* src, CvArr* dst );

 

● src

흑백 영상을 나타낸다.

 

● dst

목적 영상을 나타낸다.

영상 확대 및 축소

 

● cvResize 함수

 

영상의 크기를 조절하는 함수이다.

 

void cvResize( CvArr* src, CvArr * dst, int interpolation=CV_INTER_LINEAR );

 

● src

원 영상을 나타낸다.

 

● dst

목적 영상을 나타낸다.

 

● interpolation

보간법을 나타내며 다음의 방법이 있다.

(a) CV_INTER_NN - 최근접 이웃 보간법(nearst-neighbor interpolation)

(b) CV_INTER_LINEAR - 양선형 보간법(bilinear interploation (used by default))

(c) CV_INTER_AREA - 재표본 추출법(resampling using pixel area relation)

(d) CV_INTER_CUBIC - 큐빅 보간법(bicubic interpolation)

 

회전 영상

 

● cv2DRotationMatrix 함수

 

2 * 3 변환행렬을 생성하기 위한 함수이다.

 

CvMat* cv2DRotationMatrix( CvPoint2D32f center, double angle, double scale, CvMat* map_matrix );

 

● center

회전 중심을 나타낸다.

 

● angle

회전 각도를 나타낸다각도는 화면좌표계에서 원점을 중심으로 반시계 방향의 각을 의미한다.

 

● scale

스케일 척도를 나타낸다예를 들어, scale=2이면 2배 만큼 영상이 확대된다.

 

● map_matrix

생성되는 2 * 3 변환행렬을 가리키는 포인터를 나타낸다.

 

<v:f eqn="if lineDrawn pixelLineWidth 0" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><v:f eqn="sum @0 1 0" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><v:f eqn="sum 0 0 @1" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><v:f eqn="prod @2 1 2" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><v:f eqn="prod @3 21600 pixelWidth" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><v:f eqn="prod @3 21600 pixelHeight" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><v:f eqn="sum @0 0 1" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><v:f eqn="prod @6 1 2" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><v:f eqn="prod @7 21600 pixelWidth" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><v:f eqn="sum @8 21600 0" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><v:f eqn="prod @7 21600 pixelHeight" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><v:f eqn="sum @10 21600 0" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></v:f><o:lock aspectratio="t" v:ext="edit" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></o:lock><w:wrap type="topAndBottom" style="margin: 0px; padding: 0px; border: 0px; line-height: 1.5;"></w:wrap>

 

여기서 α=scale*cos(angle), β=scale*sin(angle)이다.

 

● cvWarpAffine 함수

 

cv2DRotationMatrix() 함수에서 생성된 변환 행렬을 영상에 적용하는 함수이다.

 

void cvWarpAffine( CvArr* src, CvArr* dst, CvMat* map_matrix, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CvScalar fillval=cvScalarAll(0) );

 

● src

원 영상을 나타낸다.

 

● dst

목적 영상을 나타낸다.

 

● map_matrix

2 * 3 변환행렬을 나타낸다.

 

● flags

다음 중 하나의 선택사항을 지정한다.

(a) CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS

양선형 보간법을 사용하고 목적 영상의 모든 픽셀을 어떤 값으로 채운다.

(b) CV_WARP_INVERSE_MAP

목적 영상에서 원 영상으로 역 변환에 의해 보간한다역방향 사상에 의해 보간한다.

 

● fillval

목적 영상에서 회전 후 남는 공간을 채울 색을 지정한다디폴트는 픽셀값이 0인 검은색이다.

대칭 영상

 

● cvFlip 함수

 

void cvFlip( CvArr* src, CvArr* dst, int flip_mode=0);

 

● src

원 영상을 나타낸다.

 

● dst

목적 영상을 나타낸다.

 

● flip_mode

(a) flip_mode = 0이면 상하 대칭(디폴트)이다.

(b) flip_mode > 0이면 좌우 대칭이다.

(c) flip_mode < 0이면 상하 대칭 후 좌우 대칭이다.

 

침식 연산과 팽창 연산

 

● cvDilate 함수

 

팽창연산을 수행하기 위한 함수이다.

 

void cvDilate( CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

 

● src

원 영상을 나타낸다.

 

● dst

목적 영상을 나타낸다.

 

● element

구조적 요소를 나타내며 만약 element = NULL이면 3 * 3 사각형 구조적 요소가 사용된다. IplConvKernel은 구조적 요소를 표현하는 구조체이다.

 

● iterations

팽창 연산 수행 횟수를 나타낸다.

 

● cvCreateStructuringElementEx 함수

 

구조적 요소를 정의하기 위한 함수이다.

 

IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y, int shape );

 

● cols

구조적 요소의 열의 수를 나타낸다.

 

● rows

구조적 요소의 행의 수를 나타낸다.

 

● anchor_x

중심점의 좌표를 나타낸다(0 .. cols-1). 만약 3 * 3 사각형 구조적 요소이면 anchor_x=1이 되고

5 * 5 사각형 구조적 요소이면 anchor_x=2가 된다.

 

● anchor_y

중심점의 좌표를 나타낸다(0 .. rows-1). 만약 3 * 3 사각형 구조적 요소이면 anchor_y=1이 되고

5 * 5 사각형 구조적 요소이면 anchor_y=2가 된다.

 

● shape

구조적 요소의 모양을 지정한다.

(a) CV_SHAPE_RECT : 사각형 구조적 요소

(b) CV_SHAPE_CROSS : 십자형 구조적 요소

(c) CV_SHAPE_ELLIPSE : 타원형 구조적 요소

(d) CV_SHAPE_CUSTOM : 사용자 정의 구조적 요소

 

cvCreateStructuringElementEx() 함수의 사용 예는 다음과 같다.

 

int element_shape = CV_SHAPE_RECT;

int pos = 1;

IplConvKernel* element = cvCreateStructuringElementEx( pos*2+1, pos*2+1, pos, pos, element_shape);

 

● cvErode 함수

 

침식연산을 수행하기 위한 함수이다.

 

void cvErode( CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

 

● src

원 영상을 나타낸다.

 

● dst

목적 영상을 나타낸다.

 

● element

구조적 요소를 나타낸다만약 element=NULL이면 3 * 3 사각형 구조적 요소가 사용된다. IplConvKernel은 구조적 요소를 표현하는 구조체이다.

 

● iterations

침식연산 수행 횟수를 지정한다.

열림 연산과 닫힘 연산

 

 cvMorphologyEx 함수

 

팽창연산과 침식연산으로부터 확장된 연산 즉열림연산닫힘연산 그리고 기울기 연산 등을 수행하기 위한 함수이다.

 

void cvMorphologyEx( const CvArr* src, CvArr* dst, CvArr* temp, IplConvKernel* element, int operation, int iterations=1 );

 

● src

원 영상을 나타낸다.

 

● dst

목적 영상을 나타낸다.

 

● temp

임시 영상을 나타내며 열림연산과 닫힘연산인 경우 NULL을 지정한다.

 

● element

구조적 요소를 나타낸다만약 element=NULL이면 3 * 3 사각형 구조적 요소가 사용된다.

 

● operation

다음 연산 중 하나를 지정한다.

(a) CV_MOP_OPEN : 열림연산

(b) CV_MOP_CLOSE : 닫힘연산

(c) CV_MOP_GRADIENT : 기울기 연산

(d) CV_MOP_TOPHAT : top hat 연산(e) CV_MOP_BLACKHAT : black hat 연산

 

● iterations

연산 수행 횟수를 지정한다.

동영상 파일

 

● cvCaptureFromFile() 함수

 

동영상 파일을 불러오는데 사용하는 함수이다.

 

CvCapture* cvCaptureFromFile( char* filename );

 

● filename

동영상 파일의 이름을 나타낸다.

 

● cvReleaseCapture() 함수

 

불러온 동영상에 대해 메모리를 해제하기 위해 사용하는 함수이다.

 

void cvReleaseCapture( CvCapture** capture );

 

● capture

메모리 해제할 동영상을 나타낸다.

 

● cvGrabFrame() 함수

 

동영상 파일(혹은 카메라)로부터 하나하나의 프레임을 잡는데(grab)사용하는 함수이다.

 

int cvGrabFrame( CvCapture* capture );

 

● capture

재생할 출력할 동영상을 나타내며 cvGrabFrame() 함수가 호출될 때 마다 파일(혹은 카메라)로부터 한 프레임씩 잡아(grab) 내부 버퍼에 저장한다.

 

● cvRetrieveFrame() 함수

 

cvGrabFrame() 함수로부터 잡은 프레임으로부터 영상을 얻어내는데 사용하는 함수이다.

 

IplImage* cvRetrieveFrame( CvCapture* capture );

 

● capture

재생할 동영상을 나타내며 cvRetrieveFrame() 함수는 cvGrabFrame() 함수로부터 잡은 프레임으로부터 얻은 영상에 대한 포인터를 반환한다서 반환된 영상은 바로 메모리를 해제해서는 안 된다.

 

● cvCreateVideoWriter() 함수

 

디스크에 동영상 파일을 생성하기 위한 함수이다동영상 파일이름과 코덱을 지정하고 그리고 fps와 프레임 크기를 지정한다.

 

CvVideoWriter* cvCreateVideoWriter( char* filename, int fourcc, double , CvSize frame_size );

 

● filename

출력할 동영상의 파일 이름을 지정한다.

 

● fourcc

프레임을 압축하기 위해 사용된 4-글자 코덱을 나타내는 코드를 설정한다. -1값을 지정하면 함수가 실행될 때 코덱을 선택할 수 있는 대화상자가 나타난다그렇지 않은 경우 CV_FOURCC 함수를 이용해 다음에서 코덱을 선택할 수 있다.

(a) CV_FOURCC('P', 'I', 'M', '1') = MPEG -1 codec

(b) CV_FOURCC('M', 'J', 'P', 'G') = motion-jpeg codec

(c) CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec

(d) CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec

(e) CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec

 

● fps

초당 재생되는 프레임의 수를 설정한다.

 

● frame_size

프레임 크기를 나타낸다.

 

 cvWriteFrame() 함수

 

지정된 동영상 파일에 한 프레임 씩 출력한다.

 

int cvWriteFrame( CvVideoWriter* writer, IplImage* image );

 

● writer

동영상 파일을 나타낸다.

 

● image

프레임을 나타낸다.

 

 cvReleaseVideoWriter() 함수

 

지정된 파일에 저장하는 것을 종료하고 저장 구조를 메모리에서 해제한다.

 

void cvReleaseVideoWriter( CvVideoWriter** writer );

 

● wrtier

동여상 파일을 나타낸다.

 

● cvQueryFrame() 함수

 

동영상 혹은 카메라로부터 프레임을 읽고 반환하는 함수이다.

 

IplImage* cvQueryFrame( CvCaptuer* capture );

 

● capture

동영상 파일을 나타낸다.

 

cvQueryFrame() 함수는 cvGrabFrame() 함수와 cvRetrieveFrame() 함수를 동시에 실행하는 효과를 갖고 있다.

 

● cvInitFont() 함수

 

글씨체를 초기화하는데 사용하는 함수이다.

 

void cvInitFont( CvFont* font, int font_face, double hscale, double vscale, double, italicScale = 0, int thickness=1);

 

● font

폰트에 대한 포인터이다.

 

● font_face

폰트 이름을 나타낸다.

() CV_FONT_HERSHEY_SIMPLEX - normal size s-serif font 보통의 글자 크기를 나타내며 산세리프 글씨체이다.

 

● hscale

글자의 수평 스케일(horizontal scale)을 나타내며 1.0f이면 원래 글자의 넓이를 나타낸다.

 

● vscale

글자의 수직 스케일(vertical scale)을 나타내며 1.0f이면 원래 글자의 높이를 나타낸다.

 

● italicScale

글자의 기울어진 정도를 나타낸다. 0은 전혀 기울지 않은 폰트이고 1.0f는 45도 기운 폰트를 나타낸다.

 

● thickness

글자의 굵기를 나타낸다.

 

● cvPutText() 함수

 

텍스트를 영상에 추가한다어떤 영상에 어떤 색상의 텍스트를 어디에 추가할것인가를 지정한다.

 

void cvPutText( CvArr* img, char* text, CvPoint org, CvFont* font, int color );

 

● img

입력영상을 나타낸다.

 

● text

출력할 텍스트를 나타낸다.

 

● org

텍스트를 출력할 좌표를 나타낸다.

 

● font

폰트를 가리키는 포인터를 나타낸다.

 

● color

텍스트의 색상을 지정한다.

 

다음은 텍스트 “I Love U"를 영상에 추가하기 위한 문장이다여기서 텍스트의 폰트는

cvPoint(10, 10이고 색상은 CV_RGB(200, 0, 0)로 지정한다.

 

cvPutText( image, "I Love U", cvPoint(10, 10), &font, CV_RGB(200, 0, 0) );

PC 카메라로부터 영상 다루기

 

● cvCaptureFromCAM() 함수

 

PC카메라로부터 동영상을 캡쳐하는데 사용하는 함수이다.

 

CvCapture* cvCaptureFromCAM( int index );

 

● index

사용할 카메라를 지정한다카메라가 1개인 경우 혹은 여러 개 중에서 특정한 카메라를 지정하지 않을 경우는 -1을 사용한다만약 2개인 경우 index값이 0이면 카메라를 선택할 수 있는 창이 나타난다.

 

● cvCreateTrackbar() 함수

 

트랙 바를 만들고 지정된 윈도우에 부착한다.

 

int cvCreateTrackbar( char* trackbar_name, char* window_name, int* value, int count, CvTrackbarCallback on_change );

 

● trackbar_name

트랙 바의 이름을 나타낸다.

 

● window_name

트랙 바가 부착될 윈도우의 이름을 지정한다.

 

● value

정수형 포인터로서 슬라이더의 위치를 나타낼 정수이다.

 

● count

트랙 바의 최대 위치여기서 최소 위치는 이다.

 

● on_change

트랙 바가 움직일 때 마다 호출하는 함수에 대한 포인터만약 호출되는 함수가 없으면 NULL이다.)

OpenCV를 이용한 얼굴인식 프로그램

 

● cvCalcEigenObjects() 함수

 

입력 영상들에 대한 고유얼굴과 평균열상을 계산한다.

 

void cvCalcEigenObjects( int nObjects, void* input, void* output, int ioFlags, int ioBufSize, void* userData, CvTermCriteria* calcLimit, IplImage* avg, float* eigVals );

 

● nObjects

입력영상의 개수를 나타낸다.

 

● input

입력영상에 대한 포인터를 가리킨다.

 

● output

고유얼굴을 나타낸다.

 

● ioFlags

입력/출력 플러그를 나타낸다입출력 플러그를 사용하지 않으면 0이다.

 

● ioBufSize

입력/출력 버퍼 크기를 나타낸다.

 

● userData

콜벡함수(callback functions)를 위해 필요한 모든 데이터를 포함하는 구조에 대한 포인터이다콜벡함수를 사용하지 않으면 0이다.

 

● calcLimit

최대 고유얼굴 영상의 개수(calcLimit.max_iter)와 가장 큰 고유값에 대한 현재의 고유값의 비율에 대한 임계값(calcLimit.epsilon)을 지정한다.

 

● avg

평균영상을 나타낸다.

 

● eigVals

고유값을 나타낸다.

 

예를 들어, cvCalcEigenObjects() 함수의 사용 예는 다음과 같다.

 

cvCalcEigenObjects(M, images, eigenObjects, 0,0,0, &criteria, avg, eigVals);

 

이것은 개의 입력 영상에 대해 고유얼굴 영상 eigenObjects과 평균영상 avg을 계산한다.

여기서 criteria는 CvTermCriteria 자료형의 변수로서 고유얼굴을 계산하는데 최대 반복횟수와 고유값에 대한 임계값을 지정한다.

 

● cvTermCriteria() 함수

 

CvTermCriteria cvTermCriteria( int type, int max_iter, double epsilon );

 

● type

CV_TERMCRIT_ITER(최대 반복횟수)와 CV_TERMCRIT_EPS(고유값에 대한 임계값)를 고려하고자 하는 경우 CV_TERMCRIT_ITER+CV_TERMCRIT_EPS처럼 지정한다.

 

● max_iter

반복 최대 횟수를 지정한다.

 

● epsilon

가장 큰 고유값에 대한 현재의 고유값의 비율에 대한 임계값을 지정한다.

 

예를 들어 cvTermCriteria() 함수의 사용 예는 다음과 같다.

 

cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 10, 0.05);

 

인수로서 10은 최대 반복횟수이고 0.05는 고유얼굴을 결정하는데 고유값에 대한 임계값을 나타내며 최대 고유값에 대한 현재의 고유값의 비율이 0.05보다 작으면 반복을 종료한다.

 

● cvEigenDecomposite() 함수

 

입력영상을 고유얼굴 공간에 투영시켰을 때 분해계수(decomposition coefficients)를 계산한다.

 

void cvEigenDecomposite( IplImage* obj, int nEigObjs, void* eigInput, int ioFlags, void* userData, IplImage* avg, float* coeffs)

 

● obj

입력영상을 나타낸다.

 

● nEigObjs

고유얼굴 영상의 개수를 나타낸다.

 

● eigInput

고유얼굴 영상에 대한 포인터를 나타낸다.

 

● ioFlags

입력/출력 플러그를 나타낸다입출력 플러그를 사용하지 않으면 0이다.

 

● userData

콜벡함수(callback functions)를 위해 필요한 모든 데이터를 포함하는 구조에 대한 포인터이다콜벡함수를 사용하지 않으면 0이다.

 

● avg

평균영상을 나타낸다.

 

● coeffs

분해계수를 나타낸다.

 

예를 들어, cvEigenDecomposite() 함수의 사용 예는 다음과 같다.

 

cvEigenDecomposite(newone, nEigens, eigenObjects, 0,0, avg, coeffs);

 

이것은 입력영상 newone을 고유얼굴 eigenObjects 공간에 투영시켰을 때 분해 계수 coeffs를 계산한다.

 

● cvEigenProjection() 함수

 

고유얼굴 공간상에서 재구성된 영상을 얻는다고유얼굴과 평균영상 그리고 분해계수로부터 재구성된 영상을 얻는다.

 

void cvEigenProjection( void* input_vecs, int eigenvec_count, int io_flags, void* userdata, float* coeffs, IplImgae* avg, IplImage* proj );

 

● input_vecs

고유얼굴 영상에 대한 포인터를 나타낸다.

 

● eigenvec_count

고유벡터의 개수를 나타낸다.

 

● io_flags

입력/출력 플러그를 나타낸다입출력 플러그를 사용하지 안흥면 0이다.

 

● userdata

콜벡함수(callback functions)를 위해 필요한 모든 데이터를 포함하는 구조에 대한 포인터이다콜벡함수를 사용하지 않으면 0이다.

 

● coeffs

분해계수를 나타낸다.

 

● avg

평균 영상을 나타낸다.

 

● proj

고유얼굴 공간상에서 재구성된 영상을 나타낸다.

 

예를 들어, cvEigenProjection() 함수의 사용 예는 다음과 같다.

 

cvEigenProjection(eigenObjects, nEigens, 0, 0, coeffs, avg, proj);

 

이것은 고유얼굴 eigenObjects과 평균영상 avg 그리고 분해계수 coeffs로부터 재구성된 영상 proj을 얻는다.

 cvRound

Rounds floating-point number to the nearest integer

C: int cvRound(double value)

 

 

Python: cv.Round(value) → int

 

 

 

함수에 입력된 실수 값을 가장 가까운 integer값으로 변환한다.  

반응형