Mask 연산과 ROI

Codren·2021년 4월 27일

Section 1. 영상 파일 공유 또는 복사

1. 실습 코드



2. 영상 파일 공유

  • img1 영상파일의 [40:120, 30:150] 픽셀 부분을 img2도 공유하여 가르킴
img1 = cv2.imread('HappyFish.jpg')
img2 = img1[40:120, 30:150] 		# 공유



3. 영상 파일 복사본 생성

  • copy() 함수 이용
  • img1 영상파일의 [40:120, 30:150] 픽셀 부분을 새로운 객체로 생성하여 img3가 가르킴
img1 = cv2.imread('HappyFish.jpg')
img3 = img1[40:120, 30:150].copy() 		# 복사본 생성



4. 결과

  • img1과 img2는 픽셀부분을 공유하기 때문에 둘 다 픽셀 0값으로 바뀜
  • img3는 복사본이므로 영향 X
img2.fill(0)			# img2 부분의 픽셀 값을 모두 0으로 채움

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




Section 2. Mask 연산과 ROI

1. ROI

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



2. Mask 영상

  • ROI 부분은 하얀색, 나머지 배경부분은 검정색으로 표현하는 영상 파일
  • 0 또는 255로 구성된 그레이스케일 영상 파일



3. Mask 연산

  • Mask 파일에서 ROI 부분만을 영상처리
  • cv2.copyTo()함수

  • src - 입력 영상 파일
  • mask - 마스크 영상 파일
  • dst - 출력 영상 (배경)
  • src, mask, dst 모두 같은 크기 같은 타입이어야함
  • 입력 dst -> 지정된 dst에 ROI 영역 copy
  • 출력 dst -> dst를 새로 생성(검정색배경)하여 ROI 영역 copy



3. 실습 코드

src = cv2.imread('airplane.bmp', cv2.IMREAD_COLOR)		
mask = cv2.imread('mask_plane.bmp', cv2.IMREAD_GRAYSCALE)
dst = cv2.imread('field.bmp', cv2.IMREAD_COLOR)



cv2.copyTo(src,mask,dst)



4. 알파채널 실습 코드

dst = cv2.imread('cat.bmp', cv2.IMREAD_COLOR)
logo = cv2.imread('opencv-logo-white.png', cv2.IMREAD_UNCHANGED)   # 알파채널(투명도) 포함 영상파일

mask = logo[:,:,-1]		# logo 영상 파일에서 가로 세로 전체영역 중 알파채널 영역을 공유
logo = logo[:,:,0:3]		# logo 영상 파일에서 가로 세로 전체영역 중 RGB채널 영역을 공유

h, w = mask.shape[:2]		# mask 영상 파일의 가로 세로 크기 구하기
crop = dst[10:10+h, 10:10+w]	# dst 영상 파일에서 mask와 크기가 같은 픽셀 영역을 공유하는 crop 변수 선언 
cv2.copyTo(logo, mask, crop)
  • 영상 파일은 numpy.ndarray 형식인데 만약 알파채널까지 포함해 4개의 채널을 갖는다면
    [ [ [0,0,0,50], [0,0,0,50] ], [ [0,0,0,70], [0,0,0,70] ]....]
    (0,0) 위치에 [r,g,b,alpha50], (0,1) 위치에 [r,g,b,alpha50], (1,0) 위치에 [r,g,b,alpha70] 픽셀값
    따라서 [:, :, -1] 은 [0,0,0,50] 에서 50인 알파채널 영역이고 [:, :, 0:3] 은 [0,0,0,50]에서 0,0,0인 RGB 영역


  • 아래 결과에서 보듯이 로고와 고양이 사진의 크기가 다르므로 코드 빨간 부분처럼 crop을 dst에서 mask 영상파일과 같은 크기의 픽셀부분을 공유하도록 함



5. 결과

0개의 댓글