C# OpenCV 강좌 : 제 13강 - 이미지 연산 (2)
이미지 연산 (2)
이미지 연산은 하나 또는 둘 이상의 이미지에 대해 비트 연산
또는 비교 연산
을 수행합니다.
Mat 클래스의 행렬 연산은 C# OpenCvSharp의 비트 연산 표현(&, | 등)
을 통해서도 Mat 클래스 간의 연산을 수행할 수 있습니다.
- Tip : OpenCvSharp에서는
비교 연산 표현(<, = 등)
은 지원하지 않습니다.
메인 코드
세부 코드
new Mat
을 사용해 이미지를 src1
에 할당합니다.
src2
은 이미지 연산을 위한 값입니다. 좌우 대칭으로 행렬 연산을 진행합니다.
- Tip : 연산을 위한 이미지는
src1
와 이미지 크기, 데이터 타입, 깊이를 모두 일치해야합니다.
연산 결과를 저장할 and
, or
, xor
, not
, compare
를 선언합니다.
대부분의 이미지 연산 관련 함수는 반환 형식을 void
로 가집니다.
즉, 메모리 공간을 미리 할당합니다.
논리곱 함수(Cv2.BitwiseAnd)
는 배열과 배열 또는 배열과 스칼라의 요소별 논리곱
을 계산합니다.
Cv2.BitwiseAnd(원본 배열 1, 원본 배열 2, 결과 배열)
로 논리곱을 적용합니다.
수식으로 표현할 경우 dst = src1 & src2;
의 형태를 갖습니다.
src1
의 픽셀값이 (243, 243, 243)
이고, src2
의 픽셀값이 (249, 249, 249)
라면 and
픽셀값은 (241, 241, 241)
이 됩니다.
243의 비트값은 11110011
이며, 249의 비트값은 11111001
이 됩니다.
각 비트 자리수 별로 연산을 진행하면, 11110001
이 됩니다.
11110001의 10진수 값은 241
이 됩니다.
논리합 함수(Cv2.BitwiseOr)
는 배열과 배열 또는 배열과 스칼라의 요소별 논리합
을 계산합니다.
Cv2.BitwiseOr(원본 배열 1, 원본 배열 2, 결과 배열)
로 논리곱을 적용합니다.
수식으로 표현할 경우 dst = src1 | src2;
의 형태를 갖습니다.
src1
의 픽셀값이 (243, 243, 243)
이고, src2
의 픽셀값이 (249, 249, 249)
라면 or
픽셀값은 (251, 251, 251)
이 됩니다.
243의 비트값은 11110011
이며, 249의 비트값은 11111001
이 됩니다.
각 비트 자리수 별로 연산을 진행하면, 11111011
이 됩니다.
11111011의 10진수 값은 251
이 됩니다.
배타적 논리합 함수(Cv2.BitwiseXor)
는 배열과 배열 또는 배열과 스칼라의 요소별 배타적 논리합
을 계산합니다.
Cv2.BitwiseXor(원본 배열 1, 원본 배열 2, 결과 배열)
로 배타적 논리합을 적용합니다.
수식으로 표현할 경우 dst = src1 ^ src2;
의 형태를 갖습니다.
src1
의 픽셀값이 (243, 243, 243)
이고, src2
의 픽셀값이 (249, 249, 249)
라면 xor
픽셀값은 (10, 10, 10)
이 됩니다.
243의 비트값은 11110011
이며, 249의 비트값은 11111001
이 됩니다.
각 비트 자리수 별로 연산을 진행하면, 00001010
이 됩니다.
00001010의 10진수 값은 10
이 됩니다.
논리 부정 함수(Cv2.BitwiseNot)
는 배열과 배열 또는 배열과 스칼라의 요소별 논리 부정
을 계산합니다.
Cv2.BitwiseNot(원본 배열, 결과 배열)
로 배타적 논리 부정을 적용합니다.
수식으로 표현할 경우 dst = ~src1;
의 형태를 갖습니다.
src1
의 픽셀값이 (243, 243, 243)
라면, not
픽셀값은 (12, 12, 12)
이 됩니다.
243의 비트값은 11110011
이며, 각 비트 자리수 별로 연산을 진행하면, 00001100
이 됩니다.
00001100의 10진수 값은 12
가 됩니다.
비교 함수(Cv2.Compare)
는 배열과 배열 또는 배열과 스칼라의 요소별 비교값
을 계산합니다.
Cv2.Compare(원본 배열 1, 원본 배열 2, 결과 배열, 비교 플래그)
로 비교를 적용합니다.
두 배열의 요소 중 비교 플래그
로 결과 배열의 요솟값이 할당됩니다.
src1
의 픽셀값이 (245, 245, 245)
이고, src2
의 픽셀값이 (245, 244, 246)
라면, compare
픽셀값은 (255, 0, 0)
이 됩니다.
비교 함수의 결과값은 조건에 부합하면 255이며, 아니라면 0이 됩니다.
같음 플래그(CmpTypes.EQ)로 두 배열의 값을 비교해, 첫 번째 원소값만 조건에 부합하므로 255이 되며, 나머지 원소값은 0이됩니다.
비교 플래그 종류
속성 | 의미 |
---|---|
CmpTypes.EQ | src1과 src2의 요소가 같음 |
CmpTypes.GT | src1이 src2보다 요소가 큼 |
CmpTypes.GE | src1이 src2보다 요소가 크거나 같음 |
CmpTypes.LT | src1이 src2보다 요소가 작음 |
CmpTypes.LE | src1이 src2보다 요소가 작거나 같음 |
CmpTypes.NE | src1과 src2의 요소가 같지 않음 |
댓글 남기기