본문 바로가기
ML & DL/OpenCV

[OpenCV] 5. 관심영역(ROI)

by 홍월이_ 2023. 2. 21.

아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다.

모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다.


이미지에 어떤 연산을 적용해서 새로운 이미지나 정보를 얻어내려고 할 때, 전체 이미지를 대상으로 연산을 하는 것보다 관심이 있는 부분만 잘라내서 하는 것이 훨씬 효과적이다.

관심있는 영역만 잘라내서 연산을 하면,

  • 연산할 데이터의 양을 줄이고 수행 시간을 단축시키는 이점
  • 데이터의 양이 줄어 들면 그 형태도 단순해지므로 적용해야 하는 알고리즘도 단순해지는 이점
  • 이미지 연산은 항상 좌표를 기반으로 해야 하는데, 그 영역이 클 때보다 작을 때 좌표 구하기가 쉽다는 이점

 

5.1 관심영역 지정

전체 이미지에서 연산과 분석의 대상이 되는 영역을 관심영역(Region Of Interest, ROI) 라고 한다.

전체 이미지가 img라는 변수에 있을 때, 관심 있는 영역의 좌표가 x, y이고 영역의 폭이 w, 높이가 h라면 관심영역을 지정하는 코드는 아래와 같다.

roi = img[y:y+h, x:x+w]

 

Numpy를 이용해서 관심영역을 지정할 때 주의해야 할 사항 두가지

  • Numpy 배열은 행(row), 열(column) 순으로 접근하므로, 이미지는 높이(height), 폭(width) 순으로 지정해야 한다.
  • Numpy 배열의 슬라이싱은 원본의 참조를 반환하기 때문에 슬라이싱 연산해서 얻은 결과의 값을 수정하면 원본 배열 객체에서도 값이 달라진다. 원본과 무관한 새로운 작업을 하려면 반드시 copy() 함수로 복제본을 생성해서 작업해야한다.

 

OpenCV 3는 관심영역을 지정하기 위한 새로운 함수를 제공한다.

마우스로 영역을 선택하고, 키보드의 스페이스 또는 엔터 키를 누르면 선택한 영역의 x, y 좌표와 영역의 폭과 높이를 튜플에 담아 반환한다. 선택을 취소하고 싶으면 키보드의 ‘c’ 키를 누르면 된다.

  • ret = cv2.selectROI([win_name,] img[, snowCrossHair=True, fromCenter=False])
    • win_name : ROI 선택을 진행할 창의 이름, str
    • img : ROI 선택을 진행할 이미지, Numpy ndarray
    • showCrossHair : 선택 영역 중심에 십자 모양 표시 여부
    • fromCenter : 마우스 시작 지점을 영역의 중심으로 지정
    • ret : 선택한 영역 좌표와 크기(x, y, w, h), 선택을 취소한 경우 모두 0
import cv2
import numpy as np

img = cv2.imread(path)

# cv2.selectROI - 엔터, 스페이스 : 저장, c : 취소
x, y, w, h = cv2.selectROI('img', img, False)
print(w, h)
if w and h:
    roi = img[y:y+h, x:x+w]
    cv2.imshow('cropped', roi)                # roi 지정 영역을 새 창으로 표시
    cv2.moveWindow('cropped', 0, 0)           # 새 창을 좌측 상단으로 이동
    cv2.imwrite('./result/cropped.jpg', roi) # ROI 영역만 파일로 저장
    
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

REFERENCE

  • 소스 코드 참고(저자 GitHub 주소)
 

GitHub - dltpdn/insightbook.opencv_project_python

Contribute to dltpdn/insightbook.opencv_project_python development by creating an account on GitHub.

github.com

 

  • OpenCV 공식문서
 

OpenCV: OpenCV modules

OpenCV  4.7.0 Open Source Computer Vision

docs.opencv.org

 

'ML & DL > OpenCV' 카테고리의 다른 글

[OpenCV] 7. 스레시홀딩  (0) 2023.02.22
[OpenCV] 6. 컬러 스페이스  (0) 2023.02.22
[OpenCV] 4. 이벤트 처리  (0) 2023.02.15
[OpenCV] 3. 창 관리  (0) 2023.02.14
[OpenCV] 2. 그림, 글씨 그리기  (0) 2023.02.14

댓글