Skip to content

Repository files navigation

opencvStudy — OpenCV 순차 학습 저장소

Python + OpenCV 를 순서대로 익히기 위한 실행 가능한 학습 자료. 레슨 16개 + 실전 프로젝트 3개. 모든 예제는 인터넷 연결 없이 바로 돌아간다.

2019년에 만든 스크립트 2개(cv2ImageFilter.py, cv2ImageMasking.py)에서 출발했다. 두 파일은 legacy/ 에 그대로 보존하고 — 지금 환경에서는 둘 다 실행이 안 된다 — 무엇이 왜 바뀌었는지를 legacy/README.md 에 정리했다. 개선판은 projects/auto_crop.py, projects/redact.py 다.


빠른 시작

git clone https://github.com/SungmanHan/opencvStudy.git
cd opencvStudy
python -m venv .venv &&source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python run.py # 레슨 목록
python run.py 1 # 첫 레슨 실행
  • 샘플 이미지는 코드로 생성된다 (python run.py samples). 처음 실행할 때 자동으로 만들어진다.
  • 모든 결과는 outputs/ 에 PNG 로 저장된다. 창으로 보려면 --show 를 붙인다.
  • 각 레슨은 독립 실행 가능하다: python lessons/07_thresholding.py --show

학습 순서

번호 순서대로 따라가면 된다. 뒤 레슨은 앞 레슨의 결론을 전제로 쓴다.

1부 · 기초 — 이미지는 배열이다

#레슨답할 수 있게 되는 질문
01입출력imread 가 실패하면 무슨 일이 일어나는가? 왜 색이 뒤집혀 보이는가?
02픽셀·ROI·채널슬라이스를 고쳤는데 원본이 왜 같이 바뀌었나? img+50 이 왜 어두워지나?
03색공간특정 색만 뽑으려면? 빨강은 왜 구간을 두 개 잡아야 하나?
04기하 변환축소·확대에 쓸 보간법은? 비스듬한 문서를 어떻게 펴나?
05그리기·텍스트검출 결과를 어떻게 표시하나? 한글은 왜 깨지나?

2부 · 전처리 — 쓸 만한 입력 만들기

#레슨답할 수 있게 되는 질문
06블러·필터노이즈 종류에 따라 어떤 필터를 골라야 하나?
07이진화조명이 고르지 않으면 왜 전역 임계값이 실패하나?
08모폴로지점 노이즈를 지우고 끊긴 획을 잇는 순서는?
09엣지 검출Canny 의 두 임계값을 어떻게 정하나?
11히스토그램사진이 어둡다는 걸 어떻게 '수치로' 판정하나?

3부 · 분석 — 무엇이 어디에 있는지 알아내기

#레슨답할 수 있게 되는 질문
10컨투어물체를 세고, 재고, 도형 종류까지 구분하려면?
12비트연산·마스킹원하는 영역에만 처리를 적용하고 자연스럽게 합성하려면?
13동영상파일·웹캠을 읽고 움직임을 찾아 저장하려면?
14특징점 매칭회전·확대된 물체를 어떻게 같은 물체로 인식하나?
15고전 검출템플릿 매칭은 언제 실패하나? 원·직선을 찾으려면?
16QR·ArUco·DNN2019년식 Haar cascade 예제는 왜 더 이상 안 도나?

4부 · 프로젝트 — 조합해서 쓰기

스크립트하는 일쓰는 레슨
auto_crop.py여백을 잘라 내용만 남기기07, 08, 10
redact.py개인정보 영역 가리기(fill/blur/pixelate)05, 08, 12
doc_scanner.py비스듬히 찍은 문서 → 정면 스캔본04, 07, 09, 10
python run.py doc_scanner --show
python run.py auto_crop myphoto.jpg --pad 12 --debug
python run.py redact assets/member_card.png --auto --mode fill

저장소 구조

opencvStudy/
├── run.py 레슨 런처 (목록·실행·샘플 생성·전체 실행)
├── lessons/ 레슨 16개 — 번호 순서대로
├── projects/ 레슨을 조합한 실전 스크립트 3개
├── cvstudy/ 공용 유틸 (샘플 생성, 결과 저장·표시)
├── legacy/ 2019년 원본 + 무엇이 왜 바뀌었는지
├── docs/ 설치 가이드, 함정 치트시트
├── assets/ 생성되는 샘플 (git 제외)
└── outputs/ 실행 결과 (git 제외)

왜 샘플을 그려서 쓰나

assets/ 의 이미지·동영상은 cvstudy/samples.py 가 그린다.

  • 저장소에 바이너리가 없고, 네트워크 없이 첫 실행이 된다
  • 정답을 아는 입력을 만들 수 있다 — 동전 5개의 좌표·반지름, 문서의 네 꼭짓점을 미리 알기 때문에 레슨이 자기 결과를 채점한다 (예: 레슨 15 HoughCircles hit 5/5, doc_scanner 꼭짓점 오차 1.4px)
  • 시드가 고정돼 있어 누가 언제 실행해도 같은 그림·같은 수치가 나온다

내 사진으로 해 보려면 대부분의 레슨이 --image 를 받는다.

python run.py 7 --image ~/Pictures/receipt.jpg --show

실행 명령 정리

python run.py # 레슨·프로젝트 목록
python run.py 9 # 9번 레슨
python run.py 9 --show # 창까지 띄우기
python run.py 9 --image a.jpg # 내 이미지로
python run.py samples --force # 샘플 다시 생성
python run.py all # 전 레슨 순차 실행 (동작 확인)
python lessons/09_edges.py -h # 레슨 설명서 (docstring 그대로)

환경

  • Python 3.10+ (3.12 에서 검증)
  • OpenCV 5.0.0, NumPy 2.5, matplotlib, Pillow — requirements.txt
  • 화면 없는 서버라면 opencv-python-headless 로 바꿔도 --show 를 빼면 전부 동작한다

OpenCV 5 에서 사라진 것 (오래된 예제를 옮길 때 주의)

없어진 API대체
cv2.CascadeClassifier (+ cv2.data 의 XML)cv2.FaceDetectorYN(ONNX), cv2.dnn, QR/ArUco
cv2.HOGDescriptorcv2.dnn 기반 검출기
findContours 의 3-값 반환 (OpenCV 3)2-값 contours, hierarchy

레슨 16 을 실행하면 현재 설치본에서 무엇이 살아 있는지 직접 확인할 수 있다.


더 보기

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages