Opencv(기초)
Opencv 기초프로그래밍
영상 불러와서 출력하기
import cv2
import sys
img = cv2.imread('C:/Users/dlckd/opencv/two/kitten.bmp')
if img is None: # 만약 불러온 파일의 내용이 없다면
print('image load fail')
sys.exit() # 종료
cv2.imshow('image',img) # 'image'제목의 창을 띄워서 img파일을 보여준다.
cv2.waitKey() # 아무키 입력시 종료
# cv2.destroyAllWindows() -> 모든 창 종료 , cv2.destroyWindow(name) 닫고자 하는 창이름을 지정해서 종료
flag태그 : 옵션을 줘서 컬러 영상이나 흑백으로 불러 올 수 있다.
- cv2.IMREAD_COLOR : BGR 컬러 영상으로 읽기
- cv2.IMREAD_GRAYSCALE : 흑백 영상으로 읽기
- cv2.IMREAD_UNCHANGED : 영상 파일 속성 그대로 읽기
영상 파일 저장하기
cv2.imwrite(filename,img,params=None) # filename 저장할 파일 이름 img 저장할 영상 데이터
창 위치 & 크기 조정
cv2.moveWindow(name,x,y) # x,y 이동할 위치 좌표
cv2.resize(name,(width,height)) # 변경할 창크기
Matplotlib을 이용한 영상 출력
- 컬러 영상의 정보가 RGB 순서이어야 함
- cv2.imread() 함수로 불러온 영상의 색상 정보는 BGR 순서이므로 이를 RGB 순서로 변경해야함
- 흑백 영상은 cmap=’gray’ 지정
import matplotlib.pyplot as plt
import cv2
# 컬러 영상 출력
imgBGR = cv2.imread('C:/Users/dlckd/opencv/two/cat.bmp')
imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB) # BGR로 불러온 영상을 RGB 순서로 바꿔준다.
plt.axis('off')
plt.imshow(imgRGB)
plt.show()
그레이스케일 영상 출력
imgGray = cv2.imread('C:/Users/dlckd/opencv/two/cat.bmp', cv2.IMREAD_GRAYSCALE)
plt.axis('off')
plt.imshow(imgGray, cmap='gray')
plt.show()
# 두 개의 영상을 함께 출력
plt.subplot(121), plt.axis('off'), plt.imshow(imgRGB)
plt.subplot(122), plt.axis('off'), plt.imshow(imgGray, cmap='gray')
plt.show()
- grayscale
- 만약 cv2.cvtColor 없이 BGR로 뽑았을 때
카메라 & 동영상 처리
- cv2.VideoCapture : 카메라와 동영상으로부터 프레임을 받아오는 작업을 수행함
카메라 처리 예제
import cv2
cap = cv2.VideoCapture() # VideoCapture 객체 생성 후 0번 카메라(노트북) 열기, cap=cv2.VideoCapture(0)과 동일
cap.open(0)
print('Frame width:', round(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
print('Frame height:', round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
while True:
ret, frame = cap.read() # 정상적으로 받아온다면 ret에는 True frame에는 해당 프레임이 저장된다.
edge = cv2.Canny(frame, 50, 150) # 에치 검출 영상
cv2.imshow('frame', frame)
cv2.imshow('edge', edge)
if cv2.waitKey(10) == 27: # esc키 누를시 종료
break
cap.release() # 사용한 자원해제
cv2.destroyAllWindows()
- 왼쪽은 아무 처리도 하지않은 영상이고, 오른쪽은 에치 검출 영상이다
동영상 처리 예제
import cv2
cap = cv2.VideoCapture('C:/Users/dlckd/opencv/two/vtest.avi')
fps = round(cap.get(cv2.CAP_PROP_FPS))
delay = round(1000 / fps)
while True:
ret, frame = cap.read()
edge = cv2.Canny(frame, 50, 150)
cv2.imshow('frame', frame)
cv2.imshow('edge', edge)
if cv2.waitKey(delay) == 27:
break
cap.release()
cv2.destroyAllWindows()
출처 - Tacademy 파이썬 OpenCV 입문
Leave a comment