Python OpenCV - ROI(관심 영역)

BANG·2020년 11월 28일
0

OpenCV

목록 보기
13/16

ROI(Region of Interest, 관심 영역)

좌표를 지정하여 선언

import cv2
import numpy as np
 
src = cv2.imread('./data/lena.jpg', cv2.IMREAD_GRAYSCALE)
 
# src와 같은 크기의 자료형 선언
dst = np.zeros(src.shape, dtype=src.dtype)
 
# dst의 이미지의 pixel개수를 선언
N = 16 # 4, 8, 32, 64
height, width = src.shape    # 그레이스케일 영상
##height, width,_ = src.shape # 컬러영상
 
# 이미지(frame)를 나누기 위한 Parameter선언
# img를 16 x 16 개의 pixel로 나누어서 dst에 대입
h = height // N
w = width  // N
 
for i in range(N):
    for j in range(N):
        y = i*h
        x = j*w       
        roi = src[y:y+h, x:x+w]	# 이미지를 나눈 pixel
        
        # pixel의 평균을 구하기
        dst[y:y+h, x:x+w] = cv2.mean(roi)[0]   # 그레이스케일 영상
##        dst[y:y+h, x:x+w] = cv2.mean(roi)[0:3] # 컬러영상
        
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()

selectROI 함수 사용(마우스 드레그)

import cv2
 
src = cv2.imread('./data/lena.jpg', cv2.IMREAD_GRAYSCALE)
 
# 원본 이미지를 띄우고, 마우스 이벤트 처리도 도와줌
roi = cv2.selectROI(src)    # 원하는 부분(관심영역,  roi)을 선택하기
print('roi =', roi)	# (x 시작 지점, y 시작 지점, x축 드래그 한 길이, y축 드래그 한 길이)
#print(type(roi))    # <class 'tuple'>
 
img = src[roi[1]:roi[1] + roi[3],
               roi[0]:roi[0] + roi[2]]
               
#print(type(img))    # <class 'numpy.ndarray'>
 
# 원본 이미지인 img를 띄워주는 코드는 없음
cv2.imshow('Img', img)  # 관심영역을 새 창으로 띄워주기
cv2.waitKey()
cv2.destroyAllWindows()

selectROIs 함수

  • 각 경계 상자를 선택한 후 "Enter"또는 "Space"버튼을 클릭하여 마무리하고 새 경계 상자를 선택
  • 경계 상자 선택이 끝나면 "Esc"키를 눌러 ROI 선택을 종료하고 추적을 시작
import cv2
 
src = cv2.imread('./data/lena.jpg', cv2.IMREAD_GRAYSCALE)
 
# 한 번에 여러 경계 상자를 선택하려는 경우
rects = cv2.selectROIs('src', src, False, True)
print('rects =', rects)
#print(type(rects))  # <class 'numpy.ndarray'>
 
#print(rects[0])
#print(type(rects[0]))   # <class 'numpy.ndarray'>
 
for r in rects:
    cv2.rectangle(src, (r[0], r[1]), (r[0]+r[2], r[1]+r[3]), 255)    
##    img = src[r[1]:r[1]+r[3], r[0]:r[0]+r[2]]
##    cv2.imshow('Img', img)
##    cv2.waitKey()
 
cv2.imshow('src', src)
cv2.waitKey()    
cv2.destroyAllWindows()
profile
Record Everything!!

0개의 댓글