import cv2 as cv
import sys
img=cv.imread('soccer.jpg') # 이미지 읽기
if img is None:
sys.exit('파일을 찾을 수 없습니다.')
cv.imshow('Image Display',img) # 윈도우에 이미지 표시
cv.waitKey() # 키가 눌려질 때까지 기다림, 괄호 속에 시간 설정 가능 ex)10000은 10초
cv.destroyAllWindows() # 키가 눌리면 모든 윈도우 닫음
Out[11]:
0
In [9]:
type(img)
img.shape
Out[9]:
numpy.ndarray
Out[9]:
(948, 1434, 3)
In [10]:
print(img[0,0,0], img[0,0,1], img[0,0,2]) # (0,0) 화소 조사, 순서대로 BGR
print(img[0,1,0], img[0,1,1], img[0,1,2]) # (0,1) 화소 조사
import cv2 as cv
import sys
img=cv.imread('cat1.jpeg')
if img is None:
sys.exit('파일을 찾을 수 없습니다.')
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
gray_small=cv.resize(gray,dsize=(0,0),fx=0.5,fy=0.5) # 반으로 축소
cv.imwrite('cat_gray.jpg',gray) # 파일로 저장
cv.imwrite('cat_gray_small.jpg',gray_small)
cv.imshow('Color image',img)
cv.imshow('Gray image',gray)
cv.imshow('Gray image small',gray_small)
cv.waitKey()
cv.destroyAllWindows()
Out[ ]:
True
Out[ ]:
True
In [ ]:
import cv2 as cv
import sys
img=cv.imread('cat1.jpeg')
if img is None:
sys.exit('파일을 찾을 수 없습니다.')
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
gray_small=cv.resize(gray,dsize=(0,0),fx=0.5,fy=0.5) # 반으로 축소
cv.imwrite('cat_gray.jpg',gray) # 파일로 저장
cv.imwrite('cat_gray_small.jpg',gray_small)
cv.imshow('Color image',img)
cv.imshow('Gray image',gray)
cv.imshow('Gray image small',gray_small)
cv.waitKey()
cv.destroyAllWindows()
그래픽 기능과 사용자 인터페이스 만들기
영상에 도형 그리고 글씨 쓰기
import cv2 as cv
import sys
img=cv.imread('girl_laughing.jpg')
if img is None:
sys.exit('파일을 찾을 수 없습니다.')
cv.rectangle(img,(830,30),(1000,200),(0,0,255),2) # 직사각형 그리기, 마지막 2는 직사각형 두께
cv.putText(img,'laugh',(830,24),cv.FONT_HERSHEY_SIMPLEX,1,(255,0,0),2) # 글씨 쓰기
cv.imshow('Draw',img)
cv.waitKey()
cv.destroyAllWindows()
마우스로 클릭한 곳에 직사각형 그리기
import cv2 as cv
import sys
img=cv.imread('girl_laughing.jpg')
if img is None:
sys.exit('파일을 찾을 수 없습니다.')
def draw(event,x,y,flags,param): # 콜백 함수
if event==cv.EVENT_LBUTTONDOWN: # 마우스 왼쪽 버튼 클릭했을 때
# 순서대로 이미지, 직사각형 그릴 시작 위치, 직사각형 크기, 색, 두께
cv.rectangle(img,(x,y),(x+200,y+200),(0,0,255),2)
elif event==cv.EVENT_RBUTTONDOWN: # 마우스 오른쪽 버튼 클릭했을 때
cv.rectangle(img,(x,y),(x+100,y+100),(255,0,0),2)
cv.imshow('Drawing',img)
cv.namedWindow('Drawing')
cv.imshow('Drawing',img)
cv.setMouseCallback('Drawing',draw) # Drawing 윈도우에 draw 콜백 함수 지정
while(True): # 마우스 이벤트가 언제 발생할지 모르므로 창 닫기 전까지 무한 반복
if cv.waitKey(1)==ord('q'):
cv.destroyAllWindows()
break
마우스 드래그로 직사각형 그리기
import cv2 as cv
import sys
img=cv.imread('girl_laughing.jpg')
if img is None:
sys.exit('파일을 찾을 수 없습니다.')
def draw(event,x,y,flags,param):
global ix, iy
if event==cv.EVENT_LBUTTONDOWN: # 마우스 왼쪽 버튼 클릭했을 때 초기 위치 저장
ix,iy=x,y
elif event==cv.EVENT_LBUTTONUP: # 마우스 왼쪽 버튼 클릭했을 때 직사각형 그리기
cv.rectangle(img,(ix,iy),(x,y),(0,0,255),2)
cv.imshow('Drawing',img)
cv.namedWindow('Drawing')
cv.imshow('Drawing',img)
cv.setMouseCallback('Drawing',draw)
while(True):
if cv.waitKey(1)==ord('q'):
cv.destroyAllWindows()
break
페인팅 기능 만들기
빨간색 붓과 파란색 붓으로 페인팅하기
import cv2 as cv
import sys
img=cv.imread('cat1.jpeg')
if img is None:
sys.exit('파일을 찾을 수 없습니다.')
BrushSiz=5 # 붓 크기
LColor,RColor=(255,0,0),(0,0,255) # 파란색, 빨간색
def painting(event,x,y,flags,param):
if event==cv.EVENT_LBUTTONDOWN:
cv.circle(img,(x,y),BrushSiz,LColor,-1) # 마우스 왼쪽 버튼 클릭하면 파란색
elif event==cv.EVENT_RBUTTONDOWN:
cv.circle(img,(x,y),BrushSiz,RColor,-1) # 마우스 오른쪽 버튼 클릭하면 빨간색
elif event==cv.EVENT_MOUSEMOVE and flags==cv.EVENT_FLAG_LBUTTON:
cv.circle(img,(x,y),BrushSiz,LColor,-1) # 왼쪽 버튼 클릭하고 이동하면 파란색
elif event==cv.EVENT_MOUSEMOVE and flags==cv.EVENT_FLAG_RBUTTON:
cv.circle(img,(x,y),BrushSiz,RColor,-1) # 오른쪽 버튼 클릭하고 이동하면 빨간색
cv.imshow('Painting',img) # 수정된 영상을 다시 그림
cv.namedWindow('Painting')
cv.imshow('Painting',img)
cv.setMouseCallback('Painting',painting)
while(True):
if cv.waitKey(1)==ord('q'):
cv.destroyAllWindows()
break