Python/OpenCV

이미지 연산

ddingz 2022. 2. 28. 17:01

영상과 영상의 연산

  • dest = cv2.add(src1, src2 [, dest, mask, dtype]) : src1과 src2 더하기
    • src1 : 입력 영상 1 또는 수
    • src2 : 입력 영상 2 또는 수
    • dest : 출력 영상
    • mask : 0이 아닌 픽셀만 연산
    • dtype : 출력 dtype
  • dest = cv2.substract(src1, src2 [, dest, mask, dtype]) : src1에서 src2를 빼기
    • 모든 인자는 cv2.add() 함수와 동일
  • dest = cv2.multiply(src1, src2 [, dest, scale, dtype]) : src1과 src2를 곱하기
    • scale : 연산 결과에 추가 연산할 값
  • dest = cv2.divide(src1, src2 [, dest, scale, dtype]) : src1을 src2로 나누기
    • 모든 인자는 cv2.multiply()와 동일

알파 블렌딩

  • cv2.addWeight(img1, alpha, img2, beta, gamma)
    • img1, img2 : 합성할 두 영상
    • alpha : img1에 지정할 가중치(알파 값)
    • beta : img2에 지정할 가중치, 흔히 (1-alpha) 적용
    • gamma : 연산 결과에 가감할 상수, 흔히 0(zero) 적용

비트와이즈 연산

  • bitwise_and(img1, img2, mask = None) : 각 픽셀에 대해 비트와이즈 AND 연산
  • bitwise_or(img1, img2, mask = None) : 각 픽셀에 대해 비트와이즈 OR 연산
  • bitwise_xor(img1, img2, mask = None) : 각 픽셀에 대해 비트와이즈 XOR 연산
  • bitwise_not(img1, mask = None) : 각 픽셀에 대해 비트와이즈 NOT 연산
    • img1, img2 : 연산 대상 영상, 동일한 shape
    • mask : 0이 아닌 픽셀만 연산, 바이너리 이미지

차영상

  • diff = cv2.absdiff(img1, img2)
    • img1, img2 : 입력 영상
    • diff : 두 영상의 차의 절대 값 반환

마스킹

색을 가지고 마스크를 만들어야 할 때, HSV로 변환하면 원하는 색상 범위의 것만 골라낼 수 있다.

  • dest = cv2.inRange(img, from, to) : 범위에 속하지 않은 픽셀 판단
    • img : 입력 영상
    • from : 범위의 시작 배열
    • to : 범위의 끝 배열
    • dst : img가 from ~ to에 포함되면 255, 아니면 0을 픽셀 값으로 하는 배열

이미지 합성

  • dst = cv2.seamlessClone(src, dst, mask, coords, flags [, output])
    • src : 입력 영상, 일반적으로 전경
    • dst : 대상 영상, 일반적으로 배경
    • mask : 마스크, src에서 합성하고자 하는 영역은 255, 나머지는 0
    • coodrs : src가 놓여지기 원하는 dst의 좌표(중앙)
    • flags : 합성 방식
      • cv2.NORMAL_CLONE : 입력 원본 유지
      • cv2.MIXED_CLONE : 입력과 대상을 혼합
    • output : 합성 결과
    • dst : 합성 결과