관심 영역을 지정한 후, 해당 영역을 반전시킨 부분을 이미지에 반영하는 코드이다.

import cv2
import numpy as np

img = cv2.imread('image.jpg')
cv2.imshow('img', img)
drag = False # drag 상태
defalut_x, default_y, w, h = -1,-1,-1,-1 # 좌표
blue = (255,0,0)

def Mouse(event, x, y, flag, param):
    global drag, default_x, default_y, img # global variance
    if event == cv2.EVENT_LBUTTONDOWN: # 왼쪽 버튼 누름
        drag = True
        default_x = x
        default_y = y

    elif event == cv2.EVENT_MOUSEMOVE: # 마우스 이동
        if drag:
            draw = img.copy() # img 복제
            cv2.rectangle(draw, (default_x, default_y), (x,y), blue, 3)
            cv2.imshow("img", draw)
            
    elif event == cv2.EVENT_LBUTTONUP: # 왼쪽 버튼 뗌
        if drag:
            drag = False
            w = x - default_x
            h = y - default_y
            if w > 0 and h > 0:
                draw = img.copy()
                cv2.rectangle(draw, (default_x, default_y), (x,y), blue, 3)
                cv2.imshow("img", draw)
                roi = img[default_y:default_y+h, default_x:default_x+w]
                reserve_roi = cv2.flip(roi, 0) # roi의 상하 반전, flip 함수에 (roi, 1)을 입력하면 좌우 반전
                cv2.imshow("drag", roi) # drag 한 창 생성
                cv2.imwrite('drag.jpg', roi) # drag 내용 저장
                img[default_y:default_y+h, default_x:default_x+w] = reserve_roi
            else:
                cv2.imshow('img',img)

cv2.setMouseCallback('img', Mouse)
cv2.waitKey()
cv2.destroyAllWindows()

 

함수 실행 전 / 함수 실행 후

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기