AI/영상

컴퓨터 비전 & OpenCV - (1. 기본 영상 처리 개념 및 환경 설정 / 개념 이해 - 입력 (Input))

개발_노트 2025. 3. 14. 23:20

📌 1️⃣ 개념 이해: 영상 처리의 기본 개념

 


🔹 영상 처리 흐름

영상 처리는 크게 다음과 같은 단계로 진행됩니다.

 1. 입력 (Input)

이미지 및 영상 처리는 다양한 입력 장치를 통해 데이터를 받아와 분석하는 과정에서 시작됩니다.
입력 데이터는 카메라, 웹캠, 스마트폰, 스캐너 등 여러 장치를 통해 수집될 수 있으며, OpenCV를 활용하여 이미지 또는 비디오를 불러올 수 있습니다.


📌 입력 장치 (Input Devices)

입력 장치 설명  사용 예시
카메라(Camera) 디지털 카메라 및 스마트폰 카메라 사진 촬영, 영상 녹화
웹캠(Webcam) 실시간 영상 입력이 가능한 장치 화상 채팅, 감시 카메라
스캐너(Scanner) 문서 및 사진을 디지털화하는 장치 OCR(문자인식), 문서 저장
이미지 파일(Image Files) JPEG, PNG, BMP 등의 파일 형식 사진 분석, 필터 적용
비디오 파일(Video Files) MP4, AVI, MKV 등의 동영상 파일 영상 처리, 객체 추적

📌 OpenCV를 활용한 이미지 입력

1️⃣ 이미지 파일 불러오기 (cv2.imread)

OpenCV에서 cv2.imread()를 사용하면 JPEG, PNG, BMP 등의 이미지 파일을 불러올 수 있습니다.

import cv2

# 이미지 불러오기
img = cv2.imread("image.jpg")  

# 이미지가 정상적으로 불러졌는지 확인
if img is None:
    print("이미지를 불러오지 못했습니다.")
else:
    # 이미지 출력
    cv2.imshow("Input Image", img)
    cv2.waitKey(0)  
    cv2.destroyAllWindows()

✅ cv2.imread("파일명") 은 기본적으로 BGR 형식으로 이미지를 불러옵니다.

📌 cv2.imread() 옵션 (이미지 불러오기 모드)

옵션  설명
cv2.IMREAD_COLOR (기본값) 컬러 이미지(BGR)로 불러옴
cv2.IMREAD_GRAYSCALE 흑백(그레이스케일) 이미지로 불러옴
cv2.IMREAD_UNCHANGED 원본 이미지 그대로 불러옴 (알파 채널 포함)

🎯 그레이스케일(흑백) 이미지로 불러오기

img_gray = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)
cv2.imshow("Grayscale Image", img_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

📌 OpenCV를 활용한 영상 입력 (웹캠 및 비디오)

2️⃣ 웹캠을 통해 실시간 영상 입력 받기

웹캠에서 실시간으로 영상을 받아오는 경우 cv2.VideoCapture() 를 사용합니다.

import cv2

# 웹캠(기본 카메라 장치) 사용
cap = cv2.VideoCapture(0)  # 일부 시스템에서는 1, 2 등의 다른 인덱스가 필요할 수 있음

# 정상적으로 카메라가 열렸는지 확인
if not cap.isOpened():
    print("웹캠을 열 수 없습니다.")
    exit()

while True:
    ret, frame = cap.read()  # 프레임 읽기
    if not ret:
        print("프레임을 가져올 수 없습니다.")
        break
    
    cv2.imshow("Webcam Input", frame)  # 화면에 출력

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

cap.release()  # 웹캠 해제
cv2.destroyAllWindows()

✅ cv2.VideoCapture(0) → 0번 카메라(기본 웹캠) 를 사용하여 실시간 영상 입력
✅ 일부 시스템에서는 0이 아닌 1 또는 2로 기본 웹캠이 설정될 수 있음
✅ cv2.VideoCapture(1) → 외부 연결된 카메라(USB 웹캠 등) 사용 가능


3️⃣ 비디오 파일 불러오기

비디오 파일(MP4, AVI 등)을 입력으로 불러와서 프레임 단위로 처리할 수 있습니다.

import cv2

# 비디오 파일 열기
cap = cv2.VideoCapture("video.mp4")

# 정상적으로 열렸는지 확인
if not cap.isOpened():
    print("비디오 파일을 열 수 없습니다.")
    exit()

while True:
    ret, frame = cap.read()  # 프레임 읽기
    if not ret:
        break
    
    cv2.imshow("Video Input", frame)  # 화면에 출력

    # 'q' 키를 누르면 종료
    if cv2.waitKey(25) & 0xFF == ord('q'):  # 약 40fps로 재생 (시스템 성능에 따라 다름)
        break

cap.release()  # 비디오 파일 해제
cv2.destroyAllWindows()

✅ cv2.VideoCapture("video.mp4") → 비디오 파일을 불러와 한 프레임씩 읽음
✅ cap.read() → 한 프레임씩 읽어 처리
✅ cv2.waitKey(25) → 약 40fps로 영상 재생 가능 (단, 실제 속도는 하드웨어 성능 및 코드 최적화 여부에 따라 달라질 수 있음)


📌 OpenCV를 활용한 이미지 저장

입력받은 이미지를 가공한 후 저장할 수도 있습니다.
cv2.imwrite("파일명", 이미지) 를 사용하면 원하는 파일 형식(JPEG, PNG 등)으로 저장할 수 있습니다.

import cv2

# 이미지 불러오기
img = cv2.imread("image.jpg")

# 그레이스케일 변환 후 저장
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite("output_gray.jpg", img_gray)  # 변환된 이미지 저장
print("이미지가 저장되었습니다.")

✅ cv2.imwrite("output.jpg", img) → 이미지를 파일로 저장
✅ JPEG 형식: 손실 압축 적용, 파일 크기가 작음
✅ PNG 형식: 무손실 압축, 파일 크기가 큼


📌 입력 데이터의 주요 고려사항

1️⃣ 입력 데이터의 해상도(Resolution)

  • 고해상도 이미지는 더 많은 픽셀 정보를 포함하지만, 처리 속도가 느려질 수 있음
  • 저해상도 이미지는 처리 속도가 빠르지만 세부 정보가 손실될 수 있음
  • 적절한 해상도로 리사이징(Resizing) 필요 (cv2.resize() 사용)

2️⃣ 컬러 모드(Color Mode)

  • RGB / BGR 변환이 필요할 수 있음 (cv2.cvtColor())
  • 컬러 이미지 vs 그레이스케일(Grayscale) 이미지 선택

3️⃣ 영상 입력 시 프레임 속도(Frame Rate) 고려

  • 실시간 처리에서는 프레임 속도(fps) 가 중요한 요소
  • cv2.waitKey() 조정을 통해 속도 최적화 가능 (기본 25ms는 약 40fps로 예상되나, 실제 성능은 하드웨어에 따라 다름)

✅ 정리

  • 카메라, 웹캠, 스마트폰, 이미지 파일, 비디오 파일 등 다양한 장치에서 입력을 받을 수 있음
  • OpenCV에서 cv2.imread()를 사용해 이미지 불러오기 가능
  • 웹캠(실시간 영상) 및 비디오 파일 입력도 cv2.VideoCapture() 를 통해 처리 가능
  • 입력된 이미지는 cv2.imshow()를 사용하여 출력 가능
  • 변환된 이미지는 cv2.imwrite() 를 사용하여 저장 가능
  • 웹캠 장치 번호(0, 1 등)는 시스템마다 다를 수 있음
  • cv2.waitKey(25)는 약 40fps로 예상되지만, 하드웨어 성능에 따라 실제 속도는 다를 수 있음