C# OpenCV 강좌 : 제 12강 - 이미지 연산 (1)
이미지 연산 (1)
이미지 연산은 하나 또는 둘 이상의 이미지에 대해 수학적인 연산
을 수행합니다.
Mat 클래스의 행렬 연산은 C# OpenCvSharp의 대수적 표현(+, - 등)
을 통해서도 Mat 클래스 간의 연산을 수행할 수 있습니다.
메인 코드
세부 코드
new Mat
을 사용해 이미지를 src
에 할당합니다.
val
은 이미지 연산을 위한 값입니다. B:0, G:0, R:30으로 행렬 연산을 진행합니다.
- Tip : 연산을 위한 이미지는
src
와 이미지 크기, 데이터 타입, 깊이를 모두 일치해야합니다.
연산 결과를 저장할 add
, sub
, mul
, div
, max
, min
, abs
, absdiff
를 선언합니다.
대부분의 이미지 연산 관련 함수는 반환 형식을 void
로 가집니다.
즉, 메모리 공간을 미리 할당합니다.
덧셈 함수(Cv2.Add)
는 배열과 배열 또는 배열과 스칼라의 요소별 합
을 계산합니다.
Cv2.Add(원본 배열 1, 원본 배열 2, 결과 배열, 마스크, 반환 형식)
로 덧셈을 적용합니다.
수식으로 표현할 경우 dst = src1 + src2;
의 형태를 갖습니다.
마스크가 null
이 아닌 경우, 마스크의 요솟값이 0이 아닌 곳만 연산을 진행합니다.
뺄셈 함수(Cv2.Subtract)
는 배열과 배열 또는 배열과 스칼라의 요소별 차
를 계산합니다.
Cv2.Subtract(원본 배열 1, 원본 배열 2, 결과 배열, 마스크, 반환 형식)
로 뺄셈을 적용합니다.
수식으로 표현할 경우 dst = src1 - src2;
의 형태를 갖습니다.
마스크가 null
이 아닌 경우, 마스크의 요솟값이 0이 아닌 곳만 연산을 진행합니다.
- Tip :
src1
과src2
의 위치에 따라 결과가 달라지므로 배열의 순서에 유의해야 합니다.
곱셈 함수(Cv2.Multiply)
는 배열과 배열 또는 배열과 스칼라의 요소별 곱
을 계산합니다.
Cv2.Multiply(원본 배열 1, 원본 배열 2, 결과 배열, 비율, 반환 형식)
로 곱셈을 적용합니다.
수식으로 표현할 경우 dst = src1 * src2;
의 형태를 갖습니다.
비율이 null
이 아닌 경우, 연산에 비율
값을 추가로 곱합니다.
나눗셈 함수(Cv2.Add)
는 배열과 배열 또는 배열과 스칼라의 요소별 나눗셈
을 계산합니다.
Cv2.Divide(원본 배열 1, 원본 배열 2, 결과 배열, 비율, 반환 형식)
로 나눗셈을 적용합니다.
수식으로 표현할 경우 dst = src1 / src2;
의 형태를 갖습니다.
비율이 null
이 아닌 경우, 연산에 비율
값을 추가로 곱합니다.
최댓값 함수(Cv2.Max)
는 배열과 배열 또는 배열과 스칼라의 요소별 최댓값
을 계산합니다.
Cv2.Max(원본 배열 1, 원본 배열 2, 결과 배열)
로 최댓값을 적용합니다.
두 배열의 요소 중 최댓값인 값
으로 결과 배열의 요솟값이 할당됩니다.
최솟값 함수(Cv2.Min)
는 배열과 배열 또는 배열과 스칼라의 요소별 최솟값
을 계산합니다.
Cv2.Min(원본 배열 1, 원본 배열 2, 결과 배열)
로 최솟값을 적용합니다.
두 배열의 요소 중 최솟값인 값
으로 결과 배열의 요솟값이 할당됩니다.
절댓값 함수(Cv2.Abs)
는 배열의 요소별 절댓값
을 계산합니다.
Cv2.Min(원본 배열)
로 절댓값을 적용합니다.
절댓값 함수는 반환 형식이 행렬 표현식(MatExpr 클래스)
이며, 매개변수로도 활용할 수 있어 특수한 경우 적절한 연산을 수행할 수 있습니다.
절댓값 차이 함수(Cv2.Absdiff)
는 배열과 배열 또는 배열과 스칼라의 요소별 절댓값 차이
을 계산합니다.
Cv2.Absdiff(원본 배열 1, 원본 배열 2, 결과 배열)
로 절댓값 차이를 적용합니다.
덧셈 함수나 뺄셈 함수에서는 두 배열의 요소를 서로 뺄셈했을 때 음수가 발생하면 0을 반환했습니다.
하지만, 절댓값 차이 함수는 이 값을 절댓값으로 변경해서 양수 형태로 반환합니다.
댓글 남기기