반응형
이미지에서 전처리를 해주거나 딥러닝 모델에 학습시키기 위해 ROI(Region Of Interest)라는 관심영역 설정이 필요하다. 이는 이미지에서 좌표로 직접 지정해주거나 selectROI 또는 selectROIs라는 OpenCV의 함수를 사용하여 쉽게 추출할 수 있다.
좌표 지정
좌표 지정은 roi = image[y:y+h, x:x+w]와 같이 작성해주면 된다.
import cv2
img = cv2.imread('brokenEgg.jpeg')
x = 232
w = 231
y = 310
h = 182
roi = img[y:y+h, x:x+w]
color = (0, 255, 0)
thickness = 5
cv2.rectangle(img=roi, pt1=(0, 0), pt2=(w, h), color=color, thickness=thickness)
cv2.imshow('image', img)
cv2.waitKey()
cv2.imwrite('result.jpeg', img)
cv2.destroyAllWindows()
selectROI
이번에는 OpenCV의 selectROI 함수를 이용한 방법이다.
import cv2
img = cv2.imread('brokenEgg.jpeg')
x, y, w, h = cv2.selectROI(img)
# roi = cv2.selectROI(img)
roi = img[y:y+h, x:x+w]
color = (0, 255, 0)
thickness = 5
cv2.rectangle(img=roi, pt1=(0, 0), pt2=(w, h), color=color, thickness=thickness)
cv2.imshow('image', img)
cv2.waitKey()
cv2.imwrite('result.jpeg', img)
cv2.destroyAllWindows()
selectROI를 이용하면 위와같은 화면에서 드래그로 원하는 ROI를 설정할 수 있다. 이후 튜플로 반환하는데 x, y, w, h순으로 반환한다. 반환받은 후 아래와 같이 좌표 지정 시 사각형을 그렸을 때와 동일하게 사용할 수 있다.
selectROIs
여러 ROI를 선택할 때 유용한다. numpy array로 반환하며 스페이스바를 누르면 다음 ROI를 선택할 수 있게 화면이 초기화되고, esc를 누르면 종료되며 배열들을 반환한다.
import cv2
img = cv2.imread('brokenEgg.jpeg')
x, y, w, h = cv2.selectROI(img)
rois = cv2.selectROIs("img", img, showCrosshair=False, fromCenter=True)
print(rois)
반응형