더북(TheBook)

OpenCV에서는 subtract() 함수를 통해 두 영상의 뺄셈 연산을 수행할 수 있습니다. subtract() 함수의 인자 구성과 설명은 add() 함수와 동일합니다.

void subtract(InputArray src1, InputArray src2, OutputArray dst,
              InputArray mask = noArray(), int dtype = -1);

src1

첫 번째 입력 행렬 또는 스칼라

src2

두 번째 입력 행렬 또는 스칼라

dst

입력 행렬과 같은 크기, 같은 채널 수를 갖는 출력 행렬. dst의 깊이는 src1, src2의 깊이와 같거나 또는 dtype 인자에 의해 결정됩니다.

mask

8비트 1채널 마스크 영상. mask 행렬 원소 값이 0이 아닌 위치에서만 덧셈 연산을 수행합니다.

dtype

출력 행렬의 깊이. src1과 src2의 깊이가 같은 경우에는 dtype에 -1을 지정할 수 있고, 이 경우 dst의 깊이는 src1, src2와 같은 깊이로 설정됩니다. src1과 src2의 깊이가 서로 다른 경우에는 dtype을 반드시 지정해야 합니다.

 

만약 뺄셈 연산의 두 입력 영상 타입이 같다면 subtract() 함수 대신 - 연산자 재정의를 사용할 수 있습니다. 그러나 서로 타입이 다른 두 영상끼리 뺄셈 연산을 수행하려면 반드시 subtract() 함수를 사용해야 하고, dtype 인자를 명시해야 합니다.

덧셈 연산과 달리 뺄셈 연산은 뺄셈의 대상이 되는 영상 순서에 따라 결과가 달라집니다. 그림 6-3은 lenna.bmp 영상과 hole2.bmp 영상의 뺄셈 연산 순서에 따른 결과 차이를 보여 줍니다. hole2.bmp 영상은 가운데 영역이 0에 가까운 검은색이고, 주변부로 갈수록 255에 가까운 흰색으로 바뀝니다. 그림 6-3(a)는 lenna.bmp 영상에서 hole2.bmp 영상을 뺀 결과입니다. 결과 영상의 가운데 영역은 레나 영상 얼굴 윤곽이 그대로 유지되어 나타나고, 주변부는 0에 가까운 검은색으로 채워진 것을 확인할 수 있습니다. 그림 6-3(b)는 hole2.bmp 영상에서 lenna.bmp 영상을 뺀 결과입니다. 이 경우에는 결과 영상 중앙부는 0에 가까운 검은색으로 나타나고 주변부는 레나 영상을 반전한 형태로 나타나는 것을 확인할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.