티스토리 뷰
일몰 이미지에서 관심 영역 지정하기
1. 정적으로 관심 영역 지정
import cv2
import numpy as np
img=cv2.imread('C:/Users/kycky/opencv/sunset3.jpg')
x=310;y=215;w=60;h=60 # 관심영역 좌표
roi = img[y:y+h,x:x+w] # 관심영역 지정
img2 = roi.copy() # 관심영역을 복사하여 img2에 저장
print(roi.shape)
cv2.rectangle(roi,(0,0),(h-1,w-1),(0,255,0),2) # roi에 사각형 그리기
cv2.imshow("img",img)
cv2.imshow("img copy",img2) # 새 창에서 관심영역 출력
cv2.waitKey(0)
cv2.destroyAllWindows()
관심 영역을 사각형 도형을 사용하여 지정했다. 하지만 위의 방법은 이미지에서 관심영역에 해당되는 좌표를 직접 코드로 입력하여 지정했다. 이 방법은 매우 번거러우므로 동적으로 해당 영역을 지정할 필요가 있다.
동적(마우스 입력)으로 관심영역 지정하기
import cv2
import numpy as np
isDragging=False # 마우스 드래그 상태 저장
x0,y0,w,h =-1,-1,-1,-1 # 영역 선택 좌표 저장
blue, red = (255,0,0),(0,0,255) # 생상 값
def onMouse(event,x,y,flags,param): # 마우스 이벤트 핸들 함수
global isDragging,x0,y0,img # 전역 변수로 참조
if event ==cv2.EVENT_LBUTTONDOWN: # 왼쪽 마우스 버튼을 누름면,드래그 시작
isDragging =True
x0=x
y0=y
elif event == cv2.EVENT_MOUSEMOVE: # 마우스 움직임
if isDragging: # 드래그 진행 중
img_draw = img.copy() # 사각형 그림 표현을 위한 이미지 복제
cv2.rectangle(img_draw,(x0,y0),(x,y),blue,2) # 드래그 진행 영역 표시
cv2.imshow('img',img_draw) # 사각형으로 표시된 그림 화면 출력
elif event ==cv2.EVENT_LBUTTONUP: # 왼쪽 마우스버튼을 땠을 때
if isDragging: # 드래그 중지
isDragging=False
w=x-x0 # 드래그 영역 폭 계산
h=y-y0 # 드래그 영역 높이 계산
print("x:%d,y:%d,w:%d,h:%d"%(x0,y0,w,h))
if w>0 and h >0: # 폭과 높이가 음수이면 드래그 방향이 옳음
img_draw = img.copy() # 선택 영역에 사각형 그림을 표시핳 이미지 복제
cv2.rectangle(img_draw,(x0,y0),(x,y),red,2)
cv2.imshow('img',img_draw)# 빨간색 사각형 이미지 출력
roi = img[y0:y0+h,x0:x0+w]#원본이미지에서 roi로 지정
cv2.imshow('cropped',roi) # roi 지정 영역을 새 창으로 표시
cv2.moveWindow('cropped',0,0) # 새 창을 화면 좌측 상단으로 이동
cv2.imwrite('./cropped.jpg',roi)# ROI 영역만 파일로 저장
print("croped.")
else:
cv2.imshow('img',img)
print("좌측 상단에서 우측 하단으로 영역을 드래그 하세요")
img=cv2.imread('C:/Users/kycky/opencv/sunset3.jpg')
cv2.imshow('img',img)
cv2.setMouseCallback('img',onMouse)
cv2.waitKey(0)
cv2.destroyAllWindows()
'Opencv 공부' 카테고리의 다른 글
[openCV] Matplotlib (1) | 2023.05.07 |
---|---|
[openCV] NumPy (3) | 2023.05.06 |
[openCV] 각종 이벤트 함수 모음 (1) | 2023.05.04 |
[openCV] 창 관리하기 (0) | 2023.05.01 |
[openCV] 그림 그리기 (2) | 2023.04.30 |