오늘부터 AI와 OpenCV 파트가 시작됐다. AI에 대한 기초적인 지식부터 OpenCV에 대한 기본적인 기능 등을 다뤄보았다. OpenCV가 macOS에서 최적화가 안 되어 있는지 초반 설치 및 설정 부분에서 에러가 많아서 시간을 많이 잡아먹었다. 수업을 진행하면서도 계속 에러가 발생해서 빨리 해결책을 찾아봐야 할 것 같다.
pip install opencv-pythonimport cv2 as cvimread(path) : 이미지 입력imshow(winame, img) : 이미지 출력waitkey(ms) : ms초 만큼 키 입력을 기다림, 0의경우 무한대기destroyAllWindows() : 열려 있는 모든 창을 종료destroyAllWindows() 아래에 waitkey(1) 추가# 상수 변수 = 대문자 스네이크 케이스 사용
DOG_PATH = "../images/dog.jpg"
img = cv.imread(DOG_PATH)
cv.imshow("DOG", img)
key = cv.waitKey(0)
cv.destroyAllWindows()
cv.waitKey(1)
ord(key) : 문자의 아스키 코드 획득chr(key) : 아스키 코드를 문자로 변경cv2.IMREAD_COLOR : 이미지를 컬러로 불러옴(기본값), 투명배경 무시cv2.IMREAD_GRAYSCALE : 이미지를 흑백으로 불러옴cv2.IMREAD_UNCHANGED : 이미지를 컬러로 불러옴, 투명배경 인식(alpha값 포함)img_default = cv.imread(DOG_PNG_PATH, cv.IMREAD_COLOR)
img_gray = cv.imread(DOG_PNG_PATH, cv.IMREAD_GRAYSCALE)
img_unchanged = cv.imread(DOG_PNG_PATH, cv.IMREAD_UNCHANGED)
cv.imshow("Default", img_default)
cv.imshow("Grayscale", img_gray)
cv.imshow("Unchanged", img_unchanged)
cv.waitKey(0)
cv.destroyAllWindows()
cv.waitKey(1)
img_default = cv.imread(DOG_PNG_PATH, cv.IMREAD_COLOR)
img_gray = cv.imread(DOG_PNG_PATH, cv.IMREAD_GRAYSCALE)
img_unchanged = cv.imread(DOG_PNG_PATH, cv.IMREAD_UNCHANGED)
print("Default shape", img_default.shape)
print("Grayscale shape", img_gray.shape)
print("Unchanged shape", img_unchanged.shape)
# Default shape (476, 320, 3)
# Grayscale shape (476, 320)
# Unchanged shape (476, 320, 4)
imwrite(path, img) : 불러온 이미지를 파일로 생성img = cv.imread(DOG_PATH)
cv.imwrite("../output/dog_copy.jpg", img)
cv2.VideoCapture(path) : path의 파일을 불러옴VideoCapture.isOpened() : 파일이 열렸는지를 확인 (True/False)VideoCapture.read() : 파일을 읽어서 frame을 반환VideoCapture.release() : 영상 객체를 해제# 비디오 출력시 반복문 활용
cap = cv.VideoCapture(DOG_VIDEO_PATH)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
cv.imshow("Video", frame)
if cv.waitKey(10) == ord("q"):
break
cap.release()
cv.destroyAllWindows()
cv.waitKey(1)
VideoCapture.get(cv2.CAP_PROP_FPS) : 영상의 fps 값 불러오기cap = cv.VideoCapture(DOG_VIDEO_PATH)
fps = cap.get(cv.CAP_PROP_FPS)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
cv.imshow("Video", frame)
if cv.waitKey(int(1000/fps)) == ord("q"):
break
cap.release()
cv.destroyAllWindows()
cv.waitKey(1)
if cv.waitKey(1) != -1 : 어떤 입력이든 주어지면cap.set(cv.CAP_PROP_FRAME_WIDTH, Size)cap.set(cv.CAP_PROP_FRAME_HEIGHT, Size)cap = cv.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
cv.imshow("Camera", frame)
if cv.waitKey(1) != -1:
break
cap.release()
cv.destroyAllWindows()
cv.waitKey(1)
cap = cv.VideoCapture(0)
count = 1
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
cv.imshow("Camera", frame)
key = cv.waitKey(1)
if key == ord("c"):
filename = f"../output/capture_{count}.png"
cv.imwrite(filename, frame)
print(f"{filename.split("/")[2]} 저장!")
count += 1
elif key == ord("q"):
break
cap.release()
cv.destroyAllWindows()
cv.waitKey(1)
cv2.VideoWriter(path, fourcc, fps, (width, height)) : 영상을 파일로 쓰기위한 객체 생성cv2.VideoWriter_fourcc(fourcc) : 영상을 쓰기위한 인코딩 생성cap = cv.VideoCapture(DOG_VIDEO_PATH)
fourcc = cv.VideoWriter_fourcc(*"H264")
fps = cap.get(cv.CAP_PROP_FPS)
width = round(cap.get(cv.CAP_PROP_FRAME_WIDTH))
height = round(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
out = cv.VideoWriter("../output/dog_copy.mp4", fourcc, fps, (width, height))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
cv.imshow("Video", frame)
out.write(frame)
if cv.waitKey(int(1000/fps)) == ord("q"):
break
out.release()
cap.release()
cv.destroyAllWindows()
cv.waitKey(1)
img = np.zeros((460, 640, 3), dtype=np.uint8)
cv.imshow("Black", img)
cv.waitKey(0)
cv.destroyAllWindows()
cv.waitKey(1)
걱정했던 것에 비해서는 첫날은 순조롭게 지나갔다. 약 2주간 진행되는 AI와 OpenCV 파트이다. 지금부터 복습을 철저하게 해서 2주 뒤에 AI와 OpenCV에 대해서 만족스러운 지식을 쌓을 수 있으면 좋겠다.