728x90
opencv 라이브러리 임포트
import cv2
import numpy as np
그리기
-선
-도형
-문자열
그리기 전에 좌표 값을 잘 알아야 합니다
(0,0)은 window 창의 왼쪽 위의 좌표이고 음수는 없습니다!!
좌표는 (x, y) 순입니다!!
선 그리기
직선 그리기
cv2.line(이미지, 시작 좌표, 끝 좌표, rgb, 선 두께, 선 종류)
도형 그리기
사각형 그리기 1 : 시작점, 끝점
cv2.rectangle(이미지, 시작 좌표, 끝 좌표, bgr, 선 두께, 선 종류)
사각형 그리기 2 : width, height
cv2.rectangle(이미지, (x,y,w,h), bgr, 선 두께, 선 종류)
원 그리기
cv2.circle(이미지, 중심 좌표, 반지름, bgr, 선 두께, 선 종류)
다각형 그리기
cv2.polylines(이미지, [좌표1, 좌표2, ..., 좌표n], 처음과 끝 좌표 잇는지, bgr, 선 두께, 선 종류)
문자열 그리기
cv2.putText(이미지, 텍스트, 텍스트의 왼쪽 아래 좌표, 폰트 종류, 폰트 크기 비율, bgr , 선 두께, 선 종류)
예제
# 화이트 캔버스 만들기
canvas = np.full((640, 640,3), 255, dtype='uint8')
# 좌표는 # 0~639까지
# (x, y)
# x: 가로
# y: 세로
# 검은색 직선
cv2.line(canvas, (0,0), (639,639), (0,0,0), 3) # 이미지, 시작 좌표, 끝 좌표, rgb, 선 두께, 선 종류
# 빨간색 사각형
cv2.rectangle(canvas, (200,200), (439, 439), (0,0,255), 5) # 이미지, 시작 좌표, 끝 좌표, bgr, 선 두께, 선 종류
# 초록색 사각형
cv2.rectangle(canvas, (10,10,100,20), (0,255,0)) # 이미지, (x,y,w,h), bgr, 선 두께, 선 종류
# 파란색 원
cv2.circle(canvas, (250,250), 50, (255,0,0), 2) # 이미지, 중심 좌표, 반지름, bgr, 선 두께, 선 종류
# 보라색 다각형
pts = np.array([[10,10], [300,400], [70,40], [50,500]])
cv2.polylines(canvas, [pts], True, (128,0,128), 2) # 이미지, 좌표들, 처음과 끝 좌표 잇는지, bgr, 선 두께, 선 종류
# 검정색 글씨
cv2.putText(canvas, 'drawing', (300,300), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,0,0)) # 이미지, 텍스트, 텍스트의 왼쪽 아래 좌표, 폰트 종류, 폰트 크기 비율, bgr , 선 두께, 선 종류
cv2.imshow('draw', canvas)
cv2.waitKey()
cv2.destroyAllWindows()
좌표는 그림판에서 커서를 대고 확인
색상은 chatgpt에게 물어보면 됩니다!
특히 cv2.rectangle() 함수는 영상처리의 바운딩 박스를 그릴 때 많이 쓰입니다!
그림판으로 고양이의 좌표를 찍어서 표시해볼게요
img = cv2.imread('data/cat.jpg')
cv2.rectangle(img, (170,80), (408, 408), (0,0,255),2)
cv2.putText(img, 'Cat', (170,75), cv2.FONT_HERSHEY_PLAIN, 2, (0,0,0), 2)
cv2.imshow('bbox', img)
cv2.waitKey()
cv2.destroyAllWindows()
바운딩 박스 위에 텍스트를 넣을 때 y 좌표를 5정도 빼주면 좋습니다!
'비전' 카테고리의 다른 글
[MediaPipe] 포즈 인식 (0) | 2024.08.25 |
---|---|
[MediaPipe] 얼굴 인식 (0) | 2024.08.23 |
[OpenCV] 특정 색 검출 (0) | 2024.08.20 |
[OpenCV] 마스킹 (0) | 2024.08.18 |
[OpenCV] 이미지, 동영상 (0) | 2024.08.17 |