[스터디노트] OpenCV - 부분 영상 다루기, 마스크 연산과 ROI

Hwan·2024년 2월 12일

OpenCV

목록 보기
7/15

앞부분 내용은 여기서

3. 부분 영상 다루기

(1) 부분 영상 참조와 복사

  • 부분 영상 참조와 복사 예제
import numpy as np
import cv2

# 부분 영상 추출

img1 = cv2.imread('HappyFish.jpg')

img2 = img1[40:120, 30:150] # 영상 참조, numpy.ndarray 슬라이싱
img3 = img1[40:120, 30:150].copy() # 영상 복사

img2.fill(0)

cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.waitKey()
cv2.destroyAllWindows()

(2) 부분 영상 처리

  • 부분 영상 처리 예제
import numpy as np
import cv2

img = cv2.imread('./data/lenna.bmp', cv2.IMREAD_GRAYSCALE)

img_face = img[200:400, 200:400]
# add() : 픽셀 값에 값을 더하여 영상을 더 밝게(입력, 더하는 값, 출력)
cv2.add(img_face, 50, img_face)
# circle() :  원 그리기(입력, 원 그릴 위치, 반지름, 색, 두께)
# cv2.circle(img_face, (100, 100), 80, 0, 2)

cv2.imshow('img', img)
cv2.imshow('img_face', img_face)
cv2.waitKey()

4. 마스크 연산과 ROI

(1) 관심 영역(ROI)

  • Region of Interest
  • 영상에서 특정 연산을 수행하고자 하는 임의의 부분 영역

(2) 마스크 연산

  • OpenCV는 일부 함수에 대해 ROI 연산을 지원하며, 이때 마스크 영상을 인자로 함께 전달해야 함
  • 마스크 영상은 cv2.CV_8UC1 타입(그레이스케일 영상)
  • 마스크 영상의 픽셀 값이 0이 아닌 위치에서만 연산이 수행됨
    -> 보통 마스크 영상으로는 0 또는 255로 구성된 이진 영상(binary image)을 사용

(3) cv2.copyTo()와 마스크 연산을 이용한 영상 합성

  • 마스크 연산을 지원하는 픽셀 값 복사 함수
  • 마스크 연산 예제
import sys
import cv2

# 마스크 영상을 이용한 영상 합성
src = cv2.imread('./data/airplane.bmp', cv2.IMREAD_COLOR)
mask = cv2.imread('./data/mask_plane.bmp', cv2.IMREAD_GRAYSCALE)
dst = cv2.imread('./data/field.bmp', cv2.IMREAD_COLOR)

if src is None or mask is None or dst is None:
    print('Image load error')
    sys.exit()

cv2.copyTo(src, mask, dst)
# dst[mask > 0] = src[mask > 0]

cv2.imshow('src', src)
cv2.imshow('mask', mask)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()

profile
Hi.

0개의 댓글