open CV_5 그림그리기

chi yeong Yu·2022년 2월 23일
0

opencv

목록 보기
5/12

그림을 그려보자

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()

profile
호기심천국

0개의 댓글