기록하기

[OpenCV] OpenCV 2강 Practice 문제 풀어보기 본문

AI 수업

[OpenCV] OpenCV 2강 Practice 문제 풀어보기

_parkdaxun 2023. 9. 16. 22:47

문제 1

원하는 이미지를 불러오고 이미지 창으로 출력 후 q 키를 누르면 창이 꺼질 수 있도록 코드를 작성하면 되는 문제이다.

작성한 코드

import cv2

# 이미지 파일 경로
image_path = '/Users/parkdaeun/Desktop/openCVImage.jpeg'

# 이미지를 읽어옵니다.
image = cv2.imread(image_path)

# 이미지를 화면에 표시합니다.
cv2.imshow('Image', image)

# 키 이벤트를 대기합니다. 'q' 키를 누르면 종료됩니다.
while True:
    key = cv2.waitKey(1)  # 1밀리초 동안 대기
    if key == ord('q'):  # 'q' 키를 누르면 종료
        break

# 창을 닫습니다.
cv2.destroyAllWindows()

 

결과물

* 이미지 파일 경로에 이미지가 꼭 있어야한다..! 저는 보기 쉽게 데스크탑에 저장했어요!!

 

문제 2

첫 번째 문제처럼 이미지 대신 동영상을 출력하면 되는 문제이다.

 

작성한 코드

import cv2

# 동영상 파일 경로
video_path = 'your_video.mp4'

# 동영상 파일을 엽니다.
cap = cv2.VideoCapture(video_path)

# 동영상을 재생합니다.
while True:
    # 동영상에서 프레임을 읽어옵니다.
    ret, frame = cap.read()

    # 프레임을 읽을 수 없으면 루프 종료
    if not ret:
        break

    # 프레임을 화면에 표시합니다.
    cv2.imshow('Video', frame)

    # 'q' 키를 누르면 동영상 재생 종료
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

# 동영상 재생이 끝나면 동영상 파일과 창을 닫습니다.
cap.release()
cv2.destroyAllWindows()

 

결과물

* 동영상 파일 경로에 동영상이 꼭 있어야한다..! 저는 보기 쉽게 데스크탑에 저장했어요!!

 

문제 3

웹캠 불러오고 크기를 가로 640, 세로 480으로 설정한 후 출력하면 되는 문제이다.

 

작성한 코드

import cv2

# 웹캠을 엽니다. 0은 기본 웹캠을 의미합니다.
cap = cv2.VideoCapture(0)

# 웹캠의 출력 창 크기를 설정합니다.
cap.set(3, 640)  # 가로 크기 설정
cap.set(4, 480)  # 세로 크기 설정

# 웹캠을 사용하여 영상을 가져와 화면에 표시합니다.
while True:
    ret, frame = cap.read()  # 웹캠에서 프레임 읽기

    cv2.imshow('Webcam', frame)  # 웹캠 화면 표시

    # 'q' 키를 누르면 루프 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 웹캠 및 창 종료
cap.release()
cv2.destroyAllWindows()

 

결과물

핸드폰과 연결 되는 웹캠으로 우선 폰에 웹캠을 허용하는지 알림이 왔다. 허용을 누르면 노트북에서 내 핸드폰으로 촬영하는 것을 확인 할 수 있었고 크기도 설정한 그대로 됐다.

 

문제 4

3번 문제처럼 웹캠을 불러온 후 그레이스케일로 웹캠 창을 출력하는 문제이다.

 

작성한 코드

import cv2

# 웹캠을 엽니다. 0은 기본 웹캠을 의미합니다.
cap = cv2.VideoCapture(0)

# 웹캠의 출력 창 크기를 설정합니다.
cap.set(3, 640)  # 가로 크기 설정
cap.set(4, 480)  # 세로 크기 설정

# 웹캠을 사용하여 영상을 가져와 그레이스케일로 변환하고 화면에 표시합니다.
while True:
    ret, frame = cap.read()  # 웹캠에서 프레임 읽기

    # 프레임을 그레이스케일로 변환합니다.
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('Grayscale Webcam', gray_frame)  # 그레이스케일 화면 표시

    # 'q' 키를 누르면 루프 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 웹캠 및 창 종료
cap.release()
cv2.destroyAllWindows()

 

문제 5

텍스트와 그리기 사진?을 불러와서 직선, 사각형, 원, 텍스트를 그려서 사진으로 출력하는 문제이다.

 

작성한 코드

import cv2

# 이미지 파일 경로
image_path = '/Users/parkdaeun/Desktop/openCVImage.jpeg'

# 이미지를 불러옵니다.
image = cv2.imread(image_path)

# 직선 그리기 (빨간색 선)
cv2.line(image, (50, 50), (300, 50), (0, 0, 255), 5)

# 사각형 그리기 (녹색 사각형)
cv2.rectangle(image, (50, 100), (300, 250), (0, 255, 0), 3)

# 원 그리기 (파란색 원)
cv2.circle(image, (200, 200), 50, (255, 0, 0), -1)

# 텍스트 쓰기 (흰색 텍스트)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(image, 'OpenCV', (10, 400), font, 3, (255, 255, 255), 2)

# 결과 이미지를 파일로 저장
output_path = 'output_image.jpg'
cv2.imwrite(output_path, image)

# 결과 이미지를 화면에 표시
cv2.imshow('Output Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

결과물

결과물이 이게 맞는지 모르겠지만.. 직선, 사각형, 원 그리고 이미지도 출력했다..!