크로마키 합성

Codren·2021년 5월 11일
0

Section 1. 색 공간

1. RGB 색 공간

  • Red, Green, Blue 색상 채널을 가지는 색 공간
  • 같은 크기로 변화하면 Grayscale 속성을 띠게 된다.




2. HSV 색 공간

  • Hue, Saturation, Value 채널을 가지는 색 공간

    ① Hue : 색상, 색의 종류
    ② Saturation : 채도, 색의 탁하고 선명한 정도
    ③ Value : 명도, 빛의 밝기




3. HSV 값 변위

  • numpy.ndarray 형식은 0~255까지만 표현가능하기 때문에 0~360도가 아닌 0~179도로 매핑
  • 0 ≤ 𝐻 ≤ 179 (0과 180에 가까운 값은 빨간색으로 표시됨)
  • 0 ≤ 𝑆 ≤ 255
    0 ≤ 𝑉 ≤ 255




4. 색 공간 분리

  • split()함수

  • m - 다채널 영상
  • mv - 출력 영상
  • dst - 출력 영상의 리스트 (각 채널)




5. 색 공간 결합

  • merge() 함수

  • mv - 입력 영상 리스트 또는 튜플
  • dst - 출력 영상




6. RGB 색 공간 분리

  • 분리된 영상 파일은 하나의 색상(자신의 색상) 채널 값만 갖기 때문에 그레이스케일 영상
  • 분리된 영상 파일에서 밝은 부분은 원래의 컬러 영상에서 해당 색상 성분이 높은 것을 의미




7. HSV 색 공간 분리

  • 원래의 컬러 영상에서 빨간색을 띠는 영역이 H 평면에서는 밝은 부분과 어두운 부분 둘다 나타남
    이는 H의 0과 180에 가까운 값이 빨간색을 띠기 때문이다



Section 2. 특정 색상 영역 추출

1. RGB 색 공간에서 녹색 영역 추출

  • Green 성분은 128보다 높게 범위를 지정하여 녹색 성분이 강한 부분을 추출
  • 나머지 Red, Blue 성분은 0~100으로 지정




2. HSV 색 공간에서 녹색 영역 추출

  • H 값이 50~80인 범위가 녹색 부분을 띰




3. RGB vs HSV 색 공간

  • 원본 컬러영상 파일이 어둡다면 밝기를 다루는 Value 채널이 있는 HSV 색 공간이 색 추출에 용이




4. 특정 색상 영역 추출

  • inRange() 함수

  • src - 입력 영상 파일
  • lowerb - 하한 값 행렬 또는 스칼라
  • upperb - 상한 값 행렬 또는 스칼라
  • dst - 입력 영상과 같은 크기의 마스크 영상 파일(numpy.uint8)을 반환
    - 범위 안에 들어가는 픽셀은 255(밝게), 나머지는 0(어둡게) 설정



Section 3. 크로마키 합성

1. 크로마 키(Chroma key) 합성

  • 녹색 또는 파란색 배경에서 촬영한 영상에 다른 배경을 합성하는 기술




2. 녹색 영역 추출

  • cv2.inRange() 함수를 사용하여 50 ≤ 𝐻 ≤ 80, 150 ≤ 𝑆 ≤ 255, 0 ≤ 𝑉 ≤ 255 범위의 영역을 검출
  • 오른쪽처럼 마스크 영상 파일을 얻을 수 있음




3. 녹색 영역에 다른 배경 영상 합성

  • 마스크 영상 파일에서 하얀색 픽셀 부분과 동일한 비오는 배경 부분을 초록색 배경 부분에 합성




4. 실습 코드

cap1 = cv2.VideoCapture('woman.mp4')		# 녹색 배경 사람 동영상 cap1
cap2 = cv2.VideoCapture('raining.mp4')		# 비오는 배경 동영상 cap2

ret1, frame1 = cap1.read()			# 녹색 배경 사람 동영상에서 프레임 추출
ret2, frame2 = cap2.read()			# 비오는 배경 동영상에서 프레임 추출

hsv = cv2.cvtColor(frame1, cv2.COLOR_BGR2HSV)	# 녹색 배경 사람 프레임을 HSV 색 공간으로 변환
mask = cv2.inRange(hsv,(50,150,0),(80,255,255))	# hsv 색 공간에서 해당 범위 내의 픽셀만을 ROI로 지정
cv2.copyTo(frame2, mask, frame1)		# frame2에서 mask영상의 roi와 동일한 픽셀 부분만 frame1에 합성

  • 스페이스바를 통해서 합성 여부 제어

0개의 댓글