AI 그게 뭔데
끄적끄적 개발일지
AI 그게 뭔데
전체 방문자
오늘
어제
  • 분류 전체보기 (342)
    • 논문 (5)
    • DL(Deep-Learning) (34)
      • 개념 (14)
      • Python 기초 (14)
      • Tensorflow (6)
      • Pytorch (0)
    • NLP (10)
    • OpenCV (53)
    • DevOps (10)
      • AWS (2)
      • Docker & Kubernetes (4)
      • Spark (3)
      • SQL (1)
    • MacOS (1)
    • React-Native (2)
    • BI (3)
      • GA(Google Analytics) (3)
      • Tableau (0)
    • 알고리즘 (221)
      • 백준 (76)
      • 프로그래머스 (108)
      • 기타 알고리즘 (37)

인기 글

태그

  • 알고리즘
  • 백준
  • 프로그래머스
  • level1
  • 이코테
  • 연습문제
  • LEVEL2
  • 파이썬
  • OpenCV
  • Python

최근 글

hELLO · Designed By 정상우.
AI 그게 뭔데

끄적끄적 개발일지

[OpenCV with Python] 영상처리 : 히스토그램 역투영
OpenCV

[OpenCV with Python] 영상처리 : 히스토그램 역투영

2022. 2. 1. 20:51

히스토그램 역투영(Histogram backprojection)  -  cv2.calcBackProject

  • 영상의 각 픽셀이 주어진 히스토그램 모델에 얼마나 일치하는지를 검사하는 방법
  • 임의의 색상 영역을 검출할 때 효과적이다.

 

cv2.calcBackProject(images, channels, hist, ranges, scale, dst=None)
  • images : 입력 영상 리스트
  • channels : 역투영 계산에 사용할 채널 번호 리스트
  • hist : 입력 히스토그램 (numpy.ndarray)
  • ranges : 히스토그램 각 차원의 최솟값과 최댓값으로 구성된 리스트
  • scale : 출력 역투영 행렬에 추가적으로 곱할 값
  • dst : 출력 역투영 영상. 입력 영상과 동일 크기, cv2.CV_8U

 

 

💬 실습

 1. 들판 구하기

import sys
import numpy as np
import cv2

# 입력 영상에서 ROI를 지정하고, 히스토그램 계산

src = cv2.imread('cropland.png')

if src is None:
    print('Image load failed!')
    sys.exit()

x, y, w, h = cv2.selectROI(src)

src_ycrcb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb)
crop = src_ycrcb[y:y + h, x:x + w]

channels = [1, 2]
cr_bins = 128
cb_bins = 128
histSize = [cr_bins, cb_bins]
cr_range = [0, 256]
cb_range = [0, 256]
ranges = cr_range + cb_range

hist = cv2.calcHist([crop], channels, None, histSize, ranges)
hist_norm = cv2.normalize(cv2.log(hist + 1), None, 0, 255, cv2.NORM_MINMAX,
                          cv2.CV_8U)

# 입력 영상 전체에 대해 히스토그램 역투영

backproj = cv2.calcBackProject([src_ycrcb], channels, hist, ranges, 1)
dst = cv2.copyTo(src, backproj)

cv2.imshow('backproj', backproj)
cv2.imshow('hist_norm', hist_norm)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()

 

 

 

2. 살색 영역 검출

import sys
import numpy as np
import cv2

# CrCb 살색 히스토그램 구하기
ref = cv2.imread('kids1.png', cv2.IMREAD_COLOR)
mask = cv2.imread('kids1_mask.bmp', cv2.IMREAD_GRAYSCALE)

if ref is None or mask is None:
    print('Image load failed!')
    sys.exit()

ref_ycrcb = cv2.cvtColor(ref, cv2.COLOR_BGR2YCrCb)

channels = [1, 2]
ranges = [0, 256, 0, 256]
hist = cv2.calcHist([ref_ycrcb], channels, mask, [128, 128], ranges)
hist_norm = cv2.normalize(cv2.log(hist + 1), None, 0, 255, cv2.NORM_MINMAX,
                          cv2.CV_8U)

# 입력 영상에 히스토그램 역투영 적용
src = cv2.imread('kids2.png', cv2.IMREAD_COLOR)

if src is None:
    print('Image load failed!')
    sys.exit()

src_ycrcb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb)

backproj = cv2.calcBackProject([src_ycrcb], channels, hist, ranges, 1)

cv2.imshow('src', src)
cv2.imshow('hist_norm', hist_norm)
cv2.imshow('backproj', backproj)
cv2.waitKey()
cv2.destroyAllWindows()

 

 

'OpenCV' 카테고리의 다른 글

[OpenCV with Python] Filtering : 블러링(blurring) - 평균값 필터  (0) 2022.02.01
[OpenCV with Python] Filtering : 필터링이란?  (0) 2022.02.01
[OpenCV with Python]영상처리 : 특정 색상 영역 추출  (0) 2022.02.01
[OpenCV with Python] 영상처리 : 히스토그램 평활화 Histogram equalization  (0) 2022.02.01
[OpenCV with Python] 영상처리 : 명암비 조절  (0) 2022.02.01
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바