그림을 그려보자
import cv2
import numpy as np
#np.zeros((512, 512, 3), np.uint8) -> 모두 0으로 된 빈 Black canvas
img = np.zeros((512, 512, 3), np.uint8) # np.uint8 -> 양수만 표현 가능, 2^8개수 만큼 표현 가능(0~255)
img = cv2.line(img, (0, 0), (511, 511), (0, 0, 255), 10) # -> (0(B), 0(G), 255(R))
#img = cv2.line(img, (왼쪽상단 (위), 왼쪽상단 (아래)), (오른 쪽 하단 기울기, 선 길이), color=(B, G, R), 선 굵기)
#cv2.line(img, start, end, color, thickness)
cv2.imshow('image', img)# image라는 이름으로 불러온다.
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
img = cv2.circle(img, (400, 60), 60, (0,255, 0), -1)
#cv2.circle(img, (x, y), 반지름(크기), (B, G, R), 선 굵기(-1이면 원 안에 색으로 채움)
cv2.imshow('image', img)#image라는 이름으로 불러온다.
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
img = cv2.ellipse(img, (200, 400), (20, 100), 10, 0, 180, 255, -1)
#cv2.ellipse(img, (x, y), (중심에서 가장 큰거리, 작은거리 ), 타원 기울기, 타원 시작 각도, 끝 각도, 색, 선 두께 )
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy as np
pts = np.array([[400, 50], [500, 50], [510, 30], [470, 10]], np.int32) # 2차원으로 만들고
pts = pts.reshape((-1, 1, 2)) # -1은 그대로 유지, 3차원 행렬로 만들기
img = cv2.polylines(img, [pts], True, (0, 255, 255))
#cv2.polylines(img, [x, y, x1, y2], 닫흰 도형, (B, G, R))
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
cv2.putText(img, 'Hello', (10, 500), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 255), 4)
#cv2.putText(img, Text, (x, y), font-type, font-size, Color, 굵기 )
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
events = [i for i in dir(cv2) if 'EVENT' in i]
print(events) # Mouse event 종류
# 첫번째 이미지
----------------------------------------------
import cv2
def draw_circle(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDBLCLK:# 마우스-왼쪽 더블클릭
cv2.circle(img, (x, y), 100, (0, 255, 255), -1)
img = np.zeros((512, 512, 3), np.uint8) # 모두 0인 Black canvas
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)
# cv2.setMouseCallback(window-name, callback, param(callback 함수에 전달 되는 Data))
while(1):
cv2.imshow('image', img)
if cv2.waitKey(0) & 0xFF == 27: # & 0xFF ?? 64비트 인 경우 필요 ! 32 비트 인 경우 제외
break
cv2.destroyAllWindows()
import cv2
import numpy as np
drawing = False # mouse 클릭 상태 확인
mode = True # True = 사각형, False=원형
xx, yy = -1, -1
def draw_circle(event, x, y, flags, param):
global xx, yy, drawing, mode
if event == cv2.EVENT_LBUTTONDOWN: # 마우스-왼쪽 누른 상태
drawing = True
xx, yy = x, y
elif event == cv2.EVENT_MOUSEMOVE:# 마우스 움직임
if drawing == True: #
if mode == True:
cv2.rectangle(img, (xx, yy), (x, y), (0, 255, 0), -1)
#retangle - 직사각형
else:
cv2.circle(img, (x, y), 5,(255, 255, 0), -1)
# drawing=True에 cv2.EVENT_MOUSEMOVE - drawing True, mode True 이면 드래그 해서 사각형을 만든다 . - 첫 번째 이미지
elif event == cv2.EVENT_LBUTTONUP: #마우스-왼쪽 때면 상태 변경
drawing = False
if mode == True:
cv2.rectangle(img, (xx, yy), (x, y), (0, 255, 0), -1)
else:
cv2.circle(img, (x, y), 5, (255, 255, 0), -1)
# m을 눌러 mode 변경하고 움직임이 없어서 클릭 시에 따다다다닥 원형 생성 - 2번째 이미지
img = np.zeros((512, 512, 3), np.uint8) # 값이 0 인 Black Canvas
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)
while True:
cv2.imshow('image', img)
k = cv2.waitKey(1) & 0xFF # & 0xFF는 64비트 인 경우 필요 ! 32 비트 인 경우 제외
if k == ord('m'):
mode = not mode # mode 변경
elif k == 27: # ESC 누르면 종료
break
cv2.destroyAllWindows()