컴퓨터 비전 & OpenCV - (1. 기본 영상 처리 개념 및 환경 설정 / 개념 이해 - 입력 (Input))
📌 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로 예상되지만, 하드웨어 성능에 따라 실제 속도는 다를 수 있음