3-8. 히스토그램 역투영

히스토그램 역투영 (Histogram backprojection)

    저번 색 검출에서는 OpenCV에서 제공하는 inRange 함수를 썼다면 주어진 히스토그램 모델을 통해 영상의 각 픽셀이 얼마나 일치하는지를 검사하여 임의의 색상 영역을 검출 할 수 있다.

     1) 기준 영상으로부터 검출할 색상에 대한 컬러 히스토그램을 미리 계산

     2) 입력 영상에서 미리 구한 컬러 히스토그램에 부합하는 픽셀을 선별

    히스토그램 역투영 함수: cv2.calcBackProject(images, channels, hist, ranges, scale, dst) -> dst

     images는 입력 영상 리스트, dst는 출력 역투영 영상으로 입력 영상과 동일한 크기 (cv2.CV_8U)

     channels는 역투영 계산에 사용할 채널 번호 리스트, hist는 numpy.ndarray 형식의 입력 히스토그램

     ranges는 히스토그램 각 차원의 최소값 & 최대값으로 구성된 리스트, scale는 출력 역투영 행렬에 추가적으로 곱할 값(없으면 1)

    아래는 히스토그램 역투영을 이용해 기준 영상에서 특정 컬러를 검출 후 다른 영상에 적용하는 코딩 순서이다.

# import opencv

# read reference image (color image)
# read mask image (grayscale image)
# convert rbg reference image to ycrcb image

# define channel list 1,2 (Cr & Cb channel - only color related channel is used) 
# define ranges list 0-256, 0-256 for each channel
# create hist using ycrcb image list, channel, mask, list, ranges

# read source iamge to apply histogram backprojection (color image)
# convert rbg source image to ycrcb image

# create backprojection iamge using calcBackProject function
# create black color image which have same height and width of source iamge
# copy source image at specific range backprojection pixel location to the black color image

     * selectROI 함수를 사용해서 기준 영상에서 ROI 컬러 영역에 부합하는 부분을 검출하는 코드 예제도 제공해주셨다.


3-9. 실전 코딩

크로마 키(Chroma Key) 합성

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

    구현할 기능:

     1) 녹색 스크린 영역 추출하기

      - 크로마 키 영상을 HSV 색 공간으로 변환

      - cv2.inRange() 함수를 이용하여 녹색 색 범위 (50<=H<=80, 150<=S<=255, 150<=V<=255) 영역 검출

     2) 녹색 영역에 다른 배경 영상을 합성하여 저장하기

      - 마스크 연산을 지원하는 cv2.copyTo() 함수 사용하여 기존 영상, 검출을 통한 마스크 영상, 배경 영상을 합성

     3) 스페이스바를 이용하여 크로마 키 합성 동작 제어하기

#import sys
#import numpy
#import openCV

# VideoCapture 함수로 녹색 배경 동영상 가져오기
# 동영상을 잘 읽어 왔는지 확인

# 합성할 영상 가져오기
# 동영상을 잘 읽어 왔는지 확인

# 두 동영상의 크기와 fps는 같다고 가정 => 확인 함수 생략
# 그래도 크기와 fps 출력 해서 확인

# 합성 여부 플래그를 boolean 타입으로 만들기

# idle loop
  # 녹색 배경 동영상 프레임 읽어오기
  # 프레임 잘 읽어 왔는지 확인
   # 안됐으면 loop 탈출
  
  # 합성 여부 플래그가 true이면
   # 합성할 영상 가져오기
   # 프레임 잘 읽어 왔는지 확인
    # 안됐으면 loop 탈출
    
   # 녹색 배경 영상 프레임을 HSV 색 공간으로 변환
   # 지정된 Range로 색 검출
   # copyTo로 합성할 프레임 영상, 색 검출한 mask 영상, 녹색 배경 영상을 합치기
   
  # imshow로 프레임 출력
  
  # 1 frame 출력 시간 동안 waitkey
  # 스페이스바 검출이 확인 되면 합성 여부 플레그 변환
  # esc 키 검출이 확인 되면 loop 종료
  
# VideoCapture 둘 다 release 해주기
# 모든 창 닫기

     * 두 개의 영상의 사이즈가 다를 경우 resize 함수로 프레임 크기 조절 후 다시 저장해야한다.

     * 사용하는 녹색 배경 영상이 달라질 경우 검출 범위를 다르게 해야한다. 

    아래는 제공된 강의 예제 코드에서 합성 결과를 동영상으로 저장하는 코드를 추가하여 저장된 결과물이다.

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.


인증 타임

Chapter 3 까지 오면서 배웠던 내용으로 크로마키 합성 하는 테스트 코드를 이해하고 사용해 볼 수 있었다. 크로마키도 신기 했지만 selectROI 함수로 특정 색 히스토그램 자동 검출하는 방식을 알려줬던 히스토그램 역투영 수업도 상당히 흥미로웠다. 다음 챕터는 필터링에 관련된 내용인데 어떤 내용이 나올지 기대된다.

3-8. 공부 인증 사진
3-9. 공부 인증 사진


#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지 Online

 

패스트캠퍼스(FastCampus) 강의 둘러보러 가기 

   

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.


 

+ Recent posts