OpenCV 비전 실무환경설정← 이전목차다음 →MetaContents

시작 전에

환경설정

Windows 11 PC 에서 파이썬 가상환경을 만들고 OpenCV, NumPy, Matplotlib, pandas 를 설치합니다. 코드는 VS Code 에서 쓰고 실행합니다. 이 쪽의 출력은 교안을 만든 PC(Windows 11 Pro, Python 3.14.6)에서 실제로 실행해 얻은 것입니다.

설치하기

  1. 파이썬 3.12 이상이 깔려 있는지 확인합니다. 없으면 python.org 에서 Windows 설치 파일을 받아 설치하고, 첫 화면의 "Add python.exe to PATH" 를 체크합니다.
  2. VS Code 를 설치하고, 확장(Extensions)에서 마이크로소프트가 만든 "Python" 확장을 설치합니다.
  3. 과목 폴더를 영어 이름의 폴더에 둡니다(예: C:\workspace\opencv-class). Windows 에서 OpenCV 의 cv2.imread, cv2.imwrite 는 경로에 한글이 있으면 실패합니다(1장 "설치 확인과 첫 코드" 참고).
PowerShell
python --version        # 파이썬 버전을 찍는다
출력
Python 3.14.6

가상환경 만들고 패키지 설치하기

과목 폴더의 requirements.txt 에 이 과정에서 쓰는 패키지가 교안 PC 와 같은 판으로 적혀 있습니다. PowerShell 에서 과목 폴더로 옮긴 뒤 한 줄씩 실행합니다.

PowerShell
cd C:\workspace\opencv-class                 # cd = change directory, 과목 폴더로 옮긴다
python -m venv .venv                         # -m = module, .venv 폴더에 가상환경을 만든다
.\.venv\Scripts\Activate.ps1                 # 가상환경을 켠다. 줄 앞에 (.venv) 가 붙는다
python -m pip install --upgrade pip          # --upgrade = 최신판으로 올린다. pip 자신을 먼저 올린다
python -m pip install -r requirements.txt    # -r = requirement file, 파일에 적힌 패키지를 적힌 판 그대로 설치한다
python -m pip check                          # check = 설치된 패키지끼리 판이 맞물리는지 검사한다
yolo settings sync=False                     # ultralytics 의 익명 사용 통계 보내기를 끈다(선택)
명령과 옵션원래 말뜻
-r requirements.txtrequirement file파일에 적힌 목록을 읽어 한꺼번에 설치한다
pip checkcheck(검사하다)서로 필요한 판이 맞지 않는 패키지가 있으면 알린다
--extra-index-url(파일 안)덧붙일 저장소 주소PyTorch 의 CPU 판을 PyTorch 저장소에서도 찾게 한다

requirements.txt 의 내용입니다.

출력
--extra-index-url https://download.pytorch.org/whl/cpu

# 1차시부터: 영상 읽기와 처리, 숫자 배열, 그래프
opencv-python==5.0.0.93
numpy==2.5.4
matplotlib==3.11.2

# 1차시 프로젝트부터: 점검표 같은 표 찍기
pandas==3.1.0

# 18차시부터 20차시까지: YOLO 학습과 추론(CPU 판 PyTorch)
ultralytics==8.4.198
torch==2.15.0+cpu
torchvision==0.29.2+cpu

교안 PC 에서 새 가상환경을 만들어 이대로 설치하면 마지막 줄이 Successfully installed …(설치된 패키지 이름이 길게 이어져 줄였습니다)로 끝나고, pip check 는 아래처럼 나옵니다.

출력
No broken requirements found.
패키지판쓰는 곳
opencv-python5.0.0.93모든 장의 영상 읽기, 처리, 저장
numpy2.5.4이미지(숫자 배열) 계산
matplotlib3.11.2이미지와 결과를 화면에 띄우기
pandas3.1.0점검표 같은 표 찍기(1장 프로젝트부터)
ultralytics8.4.198YOLO 학습과 추론(18장부터 20장까지)
torch2.15.0+cpuultralytics 가 쓰는 딥러닝 바탕(GPU 가 없어도 되는 CPU 판)
torchvision0.29.2+cputorch 와 함께 쓰인다

ultralytics 는 PyTorch 를 함께 설치하므로 가상환경이 수백 MB 커집니다(교안 PC 에서 700MB 남짓). 17장까지만 공부한다면 requirements.txt 의 마지막 세 줄을 지우고 설치해도 됩니다.

  • 가장 작은 YOLO 가중치 yolo11n.pt(5.4MB)는 교안의 data 폴더에 들어 있습니다. 없으면 18장 실습 1을 처음 실행할 때 ultralytics 가 인터넷에서 받습니다.
  • ultralytics 와 YOLO 가중치의 라이선스는 AGPL-3.0 입니다. 수업과 개인 공부에는 문제가 없고, 이 코드를 넣은 서비스를 남에게 제공하려면 소스 공개 의무나 회사의 상업 라이선스를 따로 확인해야 합니다.
  • ultralytics 를 불러오면(import ultralytics) cv2.imread 가 한글 경로도 읽도록 바뀝니다. 1장에서 본 한글 경로 문제와 결과가 달라 보일 수 있습니다.

OpenCV 패키지는 opencv-python, opencv-contrib-python, opencv-python-headless, opencv-contrib-python-headless 가운데 하나만 설치합니다. 둘 이상을 깔면 같은 cv2 를 서로 덮어써서 오류가 납니다. 이미 여러 개를 깔았으면 모두 지우고(python -m pip uninstall 패키지이름) 하나만 다시 설치합니다.

VS Code 에서는 Ctrl+Shift+P → "Python: Select Interpreter" 에서 과목 폴더의 .venv 파이썬을 고릅니다.

실행 확인하기

가상환경을 켠 상태에서 아래 코드를 실행합니다.

Python
import sys
import cv2
import numpy as np
import matplotlib

print("파이썬:", sys.version.split()[0])
print("가상환경 안인가:", sys.prefix != sys.base_prefix)
print("OpenCV:", cv2.__version__)
print("NumPy:", np.__version__)
print("Matplotlib:", matplotlib.__version__)
출력
파이썬: 3.14.6
가상환경 안인가: True
OpenCV: 5.0.0
NumPy: 2.5.4
Matplotlib: 3.11.2

실습 코드는 교안의 data 폴더를 작업 폴더로 두고 실행합니다. VS Code 에서는 data 폴더에서 터미널을 열거나, 코드 맨 위에서 os.chdir("data 폴더의 경로") 로 옮깁니다.

자주 나는 오류

오류 글까닭해결
Activate.ps1 ... 이 시스템에서 스크립트를 실행할 수 없으므로Windows 의 실행 정책이 스크립트를 막는다Set-ExecutionPolicy -Scope CurrentUser RemoteSigned 를 한 번 실행한 뒤 다시 켠다(현재 사용자에게만 적용)
ModuleNotFoundError: No module named 'cv2'가상환경을 켜지 않았거나 VS Code 가 다른 파이썬을 쓴다줄 앞의 (.venv) 확인, VS Code 에서 .venv 파이썬 고르기
[ WARN:0@...] ... imread_(...): can't open/read file 과 함께 결과가 None파일 이름 오타, 작업 폴더가 다름, 경로에 한글os.getcwd() 로 작업 폴더 확인, 영어 경로로 옮기기, np.fromfile + cv2.imdecode 로 읽기
'NoneType' object has no attribute 'shape'읽기에 실패한 None 을 그대로 썼다읽은 직후 if img is None: 으로 확인
그림의 빨강과 파랑이 바뀌어 보인다OpenCV 의 BGR 그림을 Matplotlib 에 그대로 넣었다cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 로 바꿔 넣기
패키지를 더 설치했더니 opencv-python-headless 가 함께 깔려 cv2 가 이상해졌다함께 설치한 다른 패키지가 headless 판을 요구했다python -m pip uninstall opencv-python-headless 뒤 python -m pip install --force-reinstall opencv-python (교안 PC 에서는 함께 깔리지 않았다)
ERROR: Could not open requirements file과목 폴더가 아닌 곳에서 실행했다requirements.txt 가 있는 과목 폴더로 가서 다시 실행한다
그래프의 한글이 네모로 나온다Matplotlib 의 기본 글꼴에 한글이 없다Windows 는 plt.rcParams["font.family"] = "Malgun Gothic". 코랩은 아래 "구글 코랩에서 실습하기" 의 준비 셀을 먼저 실행
cv2.imshow 창이 안 뜨거나 멈춘다노트북·원격 환경, waitKey 를 부르지 않음이 과정처럼 Matplotlib 으로 띄우기

구글 코랩에서 실습하기

구글 코랩(Google Colaboratory)은 웹 브라우저에서 파이썬을 돌리는 구글의 무료 서비스입니다. colaboratory 는 "함께 일하는 연구실"이라는 뜻입니다. 실습실 PC 에 설치 권한이 없거나 집의 PC 에 설치가 어려울 때 씁니다. 구글 계정만 있으면 되고, 파이썬과 OpenCV, NumPy, Matplotlib, pandas 는 이미 깔려 있습니다.

이 쪽의 코랩 명령은 교안을 만든 PC 에서 실행하지 않은 안내 코드입니다. 코랩은 구글 계정으로 로그인해야 해서 직접 돌려 보지 못했습니다. 그 대신 코랩과 비슷하게 OpenCV 를 4.x 판으로 바꾼 환경에서 20장의 실습을 모두 돌려 확인했습니다(아래 "교안 PC 와 다른 점").

준비물

  1. 교안과 함께 받은 colab_data.zip(과목 폴더 맨 위, 6.4MB). 실습 그림, 동영상, 정답표, YOLO 가중치 yolo11n.pt 가 들어 있습니다. 실습이 만든 out_ 파일은 들어 있지 않습니다.
  2. 코랩에서 새 노트북을 엽니다(colab.research.google.com → 새 노트북).

준비 셀

새 노트북의 첫 셀에 아래를 붙여 넣고 실행합니다. 파일 고르기 창이 뜨면 colab_data.zip 을 고릅니다. 줄 앞의 ! 는 파이썬이 아니라 리눅스 명령을 실행하라는 코랩의 표시입니다.

출력
!apt-get -qq install fonts-nanum          # 나눔 글꼴을 설치한다(-qq = 진행 글을 거의 찍지 않는다)
!pip -q install ultralytics               # 18차시부터 쓰는 YOLO 를 설치한다(-q = quiet, 조용히)

from google.colab import files
files.upload()                            # 파일 고르기 창에서 colab_data.zip 을 올린다

!unzip -q -o colab_data.zip -d /content/opencv-class   # -o = overwrite(덮어쓰기), -d = directory(풀 곳)

import os
import matplotlib.font_manager as fm
# 실습 코드는 그래프 글꼴로 "Malgun Gothic"(Windows 의 맑은 고딕)을 부른다.
# 코랩에는 이 글꼴이 없으므로, 나눔고딕 파일을 "Malgun Gothic" 이라는 이름으로 등록해 대신 쓰게 한다
fm.fontManager.ttflist.append(
    fm.FontEntry(fname="/usr/share/fonts/truetype/nanum/NanumGothic.ttf", name="Malgun Gothic"))

os.chdir("/content/opencv-class/data")    # 실습의 작업 폴더로 옮긴다
import sys, cv2
print("파이썬:", sys.version.split()[0], "· OpenCV:", cv2.__version__, "· 작업 폴더:", os.getcwd())

그다음부터는 교안의 실습 코드를 그대로 셀에 붙여 넣어 실행합니다. 마지막 줄이 찍는 파이썬과 OpenCV 의 판을 확인해 두세요. 코랩의 판은 때때로 바뀝니다. 준비 셀은 그래프를 그리기 전에 실행합니다. 이미 그래프를 그린 뒤라 한글이 네모로 나오면 "런타임 → 세션 다시 시작" 뒤 준비 셀부터 다시 돌립니다(Matplotlib 이 한 번 찾은 글꼴을 기억해 두기 때문입니다).

명령원래 말뜻
apt-get installAdvanced Package Tool리눅스에 프로그램(여기서는 글꼴)을 설치한다
files.upload()upload(올리기)내 PC 의 파일을 코랩의 작업 공간(/content)에 올린다
unzip압축 풀기zip 파일을 정한 폴더에 푼다
fm.FontEntry(..., name=...)font entry(글꼴 항목)글꼴 파일을 정한 이름으로 Matplotlib 에 알려 준다
os.chdirchange directory작업 폴더를 옮긴다

런타임이 끝나면 지워진다

코랩의 작업 공간은 런타임(runtime, 코랩이 빌려주는 컴퓨터)이 끝나면 통째로 지워집니다. 창을 오래 두거나 "런타임 연결 해제"를 누르면, 올린 데이터와 실습이 만든 out_ 파일이 모두 사라집니다. 다시 열면 준비 셀부터 다시 실행합니다.

  • 장을 건너 파일을 쓰는 곳은 같은 런타임에서 차례로 돌립니다. 특히 17장 실습 5(out_ch17_yolo/) → 18장 실습 2(학습, out_ch18_runs/parts/weights/best.pt) → 18장의 나머지, 19장, 20장 순서입니다.
  • 학습한 모델을 남겨 두려면 files.download("out_ch18_runs/parts/weights/best.pt") 로 내려받아 두었다가, 다음에 같은 자리(out_ch18_runs/parts/weights/)에 올립니다.

교안 PC 와 다른 점

항목교안 PC(Windows)코랩
가상환경과목의 .venv 를 만들어 쓴다만들지 않는다. 1장 실습 1의 "가상환경 안인가" 는 False 가 정상이다
패키지requirements.txt 로 판을 맞춘다미리 깔린 OpenCV·NumPy 를 그대로 쓰고 ultralytics 만 설치한다. requirements.txt 로 판을 바꾸면 코랩의 다른 패키지와 부딪칠 수 있어 권하지 않는다
OpenCV 판5.0.04.x(코랩에 깔린 판). 교안 PC 에서 OpenCV 만 4.14.0 으로 바꿔 20장을 모두 돌려 보니 오류·경고 없이 돌았고, 2~6·8~10·12·13·16장은 출력이 교안과 똑같았다. 다른 곳은 판 숫자, 시간 측정, 4장의 calcHist 결과 모양((256,) 대신 (256, 1), 4장 본문이 설명한 대로 ravel() 로 펴면 같다), 그리고 18~20차시의 YOLO 결과다. OpenCV 판이 달라 학습한 모델이 조금 달라지므로 점수의 끝자리나 헛것 수가 다를 수 있다(예: 18장 실습 5의 잡음 조건 F1 0.815 대신 0.762)
한글 글꼴맑은 고딕준비 셀로 나눔고딕을 "Malgun Gothic" 이름으로 등록
한글 경로 문제1장에서 본 대로 cv2.imread 가 실패한다작업 폴더가 영문 경로라 생기지 않는다
cv2.imshow창이 뜬다(이 과정은 쓰지 않음)코랩이 막아 둔다. 이 과정처럼 Matplotlib 으로 보거나 from google.colab.patches import cv2_imshow 를 쓴다
웹캠(15장 "웹캠 다루기")cv2.VideoCapture(0)쓸 수 없다. 코랩의 카메라는 브라우저를 거쳐야 해서 이 과정의 코드로는 열리지 않는다. 동영상 파일 실습은 그대로 된다
18장 학습 시간CPU 로 약 6분코랩의 CPU 에 따라 다르다. "런타임 → 런타임 유형 변경" 에서 GPU 를 골라도 코드의 device="cpu" 때문에 CPU 로 돈다. GPU 로 돌리려면 device=0 으로 바꾸고, 결과의 끝자리가 교안과 달라질 수 있다
시간을 재는 실습교안의 ms 숫자컴퓨터가 달라 숫자가 다르다. "몇 배 차이" 로 견준다
← 이전비전 데이터 전처리 및 OpenCV 실무다음 →과정 로드맵과 STEP 요약