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 함수로 특정 색 히스토그램 자동 검출하는 방식을 알려줬던 히스토그램 역투영 수업도 상당히 흥미로웠다. 다음 챕터는 필터링에 관련된 내용인데 어떤 내용이 나올지 기대된다.


#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지 Online
패스트캠퍼스(FastCampus) 강의 둘러보러 가기
↓ ↓ ↓
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'남돈내배 > 2022_FastCampus_환급이벤트' 카테고리의 다른 글
| 패스트캠퍼스 챌린지 22일차 - Ch4. 필터링 (0) | 2022.02.14 |
|---|---|
| 패스트캠퍼스 챌린지 21일차 - Ch4. 필터링 (0) | 2022.02.13 |
| 패스트캠퍼스 챌린지 19일차 - Ch3. 기본적인 영상 처리 기법 (0) | 2022.02.11 |
| 패스트캠퍼스 챌린지 18일차 - Ch3. 기본적인 영상 처리 기법 (0) | 2022.02.10 |
| 패스트캠퍼스 챌린지 17일차 - Ch3. 기본적인 영상 처리 기법 (0) | 2022.02.09 |