Published on

OpenCV shape 변환

Authors
  • avatar
    Name
    Inhwan Cho
    Twitter

OpenCV와 PIL의 이미지 형태

  • 결과를 보시면 알겠지만 width, height이 반대입니다.
import cv2
from PIL import Image


img = cv2.imread('Resources/cards.jpg')
h, w, c = img.shape #가로 세로 채널(색)
print(img.shape)

#(500, 477, 3)

pil_img = Image.open('Resources/cards.jpg')
w, h = pil_img #세로 가로
print(a.size)
#(477, 500)

openCV 사진 좌표 형태

  • openCV에서 좌표는 아래 사진처럼 표현 됩니다.
  • x축은 오른쪽으로 가지만 y축은 아래로 가는게 중요합니다.

cv2에서의 좌표

Resize

import cv2

img = cv2.imread('lena.png')

print(img.shape)
#(512,512,3)

imgResize = cv2.resize(img,(200,150))
print(imgResize.shape)
#(200,150,3)


cv2.imshow('origin',img)
cv2.imshow('resize',imgResize)

cv2.waitKey(0)
리사이즈와 원본

Crop

import cv2


img = cv2.imread('lena.png')

print(img.shape)
#(512,512,3)
h, w, c = img.shape


imgResize = cv2.resize(img,(500,400))
print(imgResize.shape)
#(500,400,3)



# cv에서 crop은 [width(세로), height(가로), 색상 채널]입니다
imgCropped = img[0:200,200:400]

cv2.imshow('resize',imgResize)
cv2.imshow('cropped',imgCropped)

cv2.waitKey(0)
Cropped img & original img

Drawing

  • 영역 만들기
import cv2

#0값은 black으로 표현됨
img = np.zeros((512,512,3), np.uint8)

# 파란색 영역을 그림
img[200:300, 100:500] = 255,0,0 #BGR(Blue, Green, Red)


cv2.imshow('image1', img)

cv2.waitKey(0)
black(zeros) & blue img
  • line, rectangle 그리기
img = np.zeros((512,512,3), np.uint8)

#start_point, end_point, color, thickness
cv2.line(img,(0,0),(300,300),color=(0,0,255),thickness=3)

cv2.imshow('image1', img)
cv2.waitKey(0)
red line
cv2.rectangle(img,(50,50),(500,200),(0,255,0),3)

cv2.imshow('image1', img)
cv2.waitKey(0)
green rectangle
cv2.circle(img,(200,200), 30, (255,20,50),thickness=3)

cv2.imshow('image1', img)
cv2.waitKey(0)
blue circle
cv2.putText(img, 'THIS IS Text', (50,300),fontFace=cv2.FONT_HERSHEY_COMPLEX,fontScale=1,
color=(255,0,0),thickness=5)

cv2.imshow('image1', img)
cv2.waitKey(0)
blue text