해당 포스트는 "OpenCV로 배우는 영상 처리 및 응용", "C++ API OpenCV 프로그래밍" 책의 내용을 요약한 것이다.



※ LUT 함수

void LUT(InputArray src, InputArray lut, OutputArray dst, int interpolation=0)

: "dst(i) = lut(src(i) + d)"로 룩업 테이블 lut를 이용하여 입력 src를 출력 dst로 계산한다. src는 8비트 입력행렬이고 lut는 256개의 원소를 갖는 참조표이다.


※ 행렬의 절댓값

MatExpr abs(const Mat& m)
: 행렬 m의 모든 요소에 대해 절댓값을 한 행렬을 반환한다.

void absdiff(InputArray src1, InputArray src2, OutputArray dst)
: 행렬 src1에서 src2를 뺀 절댓값을 dst에 반환한다.

void convertScaleAbs(InputArray src, OutputArray dst, double alpha=1, double beta=0)
: 행렬 src의 요소에 alpha 값을 곱한 후 beta 값을 더한 절댓값에 saturate_cast<uchar>을 해 uchar 자료형으로 변환하여 dst에 저장한다.


※ 행렬의 비교 및 범위 연산

void compare(InputArray src1, InputArray src2, OutputArray dst, int cmpop)

: src1과 src2 행렬 사이의 비교연산을 수행해 dst에 저장한다. cmpop로는 CMP_EQ, CMP_GT, CMP_GE 등이 있다. 만약 cmpop에 해당 하는 비교연산에 충족할 경우 255가 행렬요소에 저장되고 충족 못 할 경우 0이 저장된다.


bool checkRange(InputArray src, bool quiet=true, Point* pos=0, double minVal = -DBL_MAX, double maxMal=DBL_MAX)

: 입력 행렬의 모든 요소가 NaN 또는 무한대 값을 갖는 지를 확인하고 minVal<= src(i) < maxVal 범위의 값인지를 확인한다. 범위 밖의 요소값이 하나라도 있으면 함수는 예외를 발생하거나, quiet = true이면 false를 반환한다. pos에는 첫 번째로 범위를 벗어난 행렬 요소의 포인터를 지정한다.


void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst)

: 입력 행렬 요소가 lowerb(i) <= src(i) <= upperb(i) 범위에 있으면 dst(i) = 255, 그렇지 않으면 dst(i)=0이다. dst는 src와 같은 크기의 CV_8U 자료형이다.


※ 수치 관련 함수

void magnitude(InpuArray x, InputArray y, OutputArray mag)

                                

                

- void phase(InputArray x, InputArray y, OutputArray angle, bool angleInDegrees = false)

: angle(i) = atan2(y(i),x(i))이다. 만약 angleInDegrees가 true이면 atan2(y(i),x(i)) * 180 / PI 를 하여 angle(i)에 각도를 저장한다.


- void cartToPolar(InputArray x, InputArray y , OutputArray magnitude, OutputArray angle, bool angleInDegrees =false)

: 좌표를 극좌표로 변환하여 크기는 magnitude에 위상각은 라디안으로 계산해서 angle에 저장한다. angleInDegrees가 true 일 경우 각도를 저장한다.


- void polarToCart(InputArray magnitude, InputArray angle, OutputArray x, OutputArray y, bool angleInDegrees = false)

: 극좌표의 크기와 위상각 행렬 magitude와 angle을 직교좌표로 변환하여 x, y 행렬에 저장한다.


- int solveCubic(InputArray coeffs, OutputArray roots)
: 3차 방정식의 실근을 계산한다. roots는 1 또는 3개의 요소를 갖는 실근의 출력행렬이다. coeffs는 3차 방정식의 계수 행렬로 3 또는 4개의 요소를 갖고 3일 경우 x^3의 계수가 1이다. coeffs의 0번 째 인덱스는 x^3의 계수이고 4번 째 인덱스가 상수항이다.


- double solvePoly(InputArray coeffs, OutputArray roots, int maxIters)

: 다항식의 실근, 복소수 근을 구한다. solveCubic 함수와 거의 같으며 다른 점은 coeffs 행렬이 방정식의 계수인데 slovePoly의 경우 0번 째 인덱스가 상수항이고 마지막 인덱스가 제일 큰 제곱항의 계수이다. 


※ 통계 함수

- int countNonZero(InputArray src)

: 행렬 src에서 0이 아닌 요소의 개수를 반환한다.


- Scalar mean(InputArray src, InputArray mask = noArray())

: src의 평균을 계산해서 반환한다. 만약 mask 행렬이 지정되었으면 mask(i)가 0이 아닌 i 요소들의 평균을 계산하는 데 나누는 값은 countNonZero(mask) 이다.  mask 행렬 요소가 모두 0이면 0을 반환한다.


- void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev, InputArray mask=noArray())

: src의 평균과 표준편차를 채널별로 mean과 stddev에 계산한다.


- void minMaxIdx(InputArray src, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0, InputArray mask = noArray())

: 행렬 src에서 최소값 minVal과 최대값 maxVal을 계산하고 각각의 위치를 minIdx와 maxIdx 배열에 저장한다. 


- void minMaxLoc(InputArray src, double* minVal, double* maxVal, Point* minIdx=0, Point* maxIdx=0, InputArray mask = noArray())

: 행렬 src에서 최소값 minVal과 최대값 maxVal을 계산하고 각각의 위치를 minIdx와 maxIdx Point에 저장한다. 


- reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype=-1)

: dim=0 이면 수직(열) 방향으로 rtype 연산을 수행하여 결과를 dst에 저장한다. dim=1이면 수평(행) 방향으로 rtype 연산을 수행한다. rtype은 연산의 종류를 나타내고 REDUCE_SUM, REDUCE_AVG 등이 있다. 


- void sort(InputArray src, OutputArray dst, int flags)

: src의 행 또는 열을 오름차순 또는 내림차순으로 정렬한 후 dst에 저장한다.


- void sortIdx(InputArray src, OutputArray dst, int flags)

: src의 행 또는 열을 오름차순 또는 내림차순으로 정렬한다. 하지만 sort와 달리 정렬한 행렬 요소를 dst에 저장하는 게 아니라 행렬 요소의 인덱스를 dst에 저장한다.


- void randShuffle(InputOutputArray dst, double iterFactor=1, RNG* rng=0)

: 행렬의 요소를 난수에 의해 무작위로 섞는다. iterFactor는 무작위로 섞는 연산의 회수를 결정한다. rng는 난수 발생 함수로 rng=0이면 theRNG 함수이다.

+ Recent posts