{"id":20562789,"url":"https://github.com/mint-lab/cv_tutorial","last_synced_at":"2025-10-26T11:18:49.731Z","repository":{"id":128829931,"uuid":"603790996","full_name":"mint-lab/cv_tutorial","owner":"mint-lab","description":"Computer Vision Tutorial","archived":false,"fork":false,"pushed_at":"2024-12-05T07:47:13.000Z","size":93561,"stargazers_count":40,"open_issues_count":1,"forks_count":8,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-16T19:32:44.565Z","etag":null,"topics":["computer-vision"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mint-lab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-19T15:32:59.000Z","updated_at":"2025-01-02T01:08:00.000Z","dependencies_parsed_at":"2024-04-25T00:38:56.395Z","dependency_job_id":"963c5cfc-0c49-4bcf-b100-644ba743ddaf","html_url":"https://github.com/mint-lab/cv_tutorial","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mint-lab%2Fcv_tutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mint-lab%2Fcv_tutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mint-lab%2Fcv_tutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mint-lab%2Fcv_tutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mint-lab","download_url":"https://codeload.github.com/mint-lab/cv_tutorial/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242171483,"owners_count":20083558,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computer-vision"],"created_at":"2024-11-16T04:13:37.586Z","updated_at":"2025-10-26T11:18:49.714Z","avatar_url":"https://github.com/mint-lab.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"## Computer Vision Tutorial\n\n_Computer Vision Tutorial_ includes classical theories and techniques and also recent ML/DL-based methods for computer vision. As classical theories and techniques, the tutorial contains image processing, camera projection models, camera calibration, and pose estimation. As recent ML/DL-based methods, the tutorial deals with object categorization (and backbone networks), and its extensions such as object detection and instance segmentation. It also explains about further topics such as multi-object tracking, structure-from-motion, NeRF, and so on.\n\nThis tutorial has been initiated and maintained to teach undergraduate CSE students in [SEOULTECH](https://en.seoultech.ac.kr/) as the course of _Computer Vision_ (109079).\n\nThis tutorial contains code examples briefly written in [Python](https://python.org/) with [OpenCV](https://opencv.org/) and [PyTorch](https://pytorch.org/).\n* :bulb: Some of code examples will help readers to understand **inside** of algorithms (e.g. how it works).\n* :wrench: Some of code examples will provide **usages and applications** of OpenCV functions (e.g. how to use it).\n* :camera: Some of code examples came from my **3D Vision Tutorial**, [3dv_tutorial](https://github.com/mint-lab/3dv_tutorial).\n\n\n\n### Lecture Slides\n* [Section 1. Introduction](https://github.com/mint-lab/cv_tutorial/blob/master/slides/01_introduction.pdf)\n* [Section 2. Image Editing: Learning OpenCV](https://github.com/mint-lab/cv_tutorial/blob/master/slides/02_image_editing.pdf)\n* [Section 3. Image Processing](https://github.com/mint-lab/cv_tutorial/blob/master/slides/03_image_processing.pdf)\n* [Section 4. Color](https://github.com/mint-lab/cv_tutorial/blob/master/slides/04_color.pdf)\n* [Section 5. Image Formation](https://github.com/mint-lab/cv_tutorial/blob/master/slides/05_image_formation.pdf)\n* [Section 6. Image Geometry](https://github.com/mint-lab/cv_tutorial/blob/master/slides/06_image_geometry.pdf)\n* [Section 7. Solving Problems](https://github.com/mint-lab/cv_tutorial/blob/master/slides/07_solving_problems.pdf)\n* [Section 8. Image Correspondence](https://github.com/mint-lab/cv_tutorial/blob/master/slides/08_image_correspondence.pdf)\n* Section 9. Image Classification: CNN Backbones\n  * Acknowledgement) Many slides about CNNs are adopted from [Stanford CS231n](https://cs231n.stanford.edu/).\n* Section 10. Image Segmentation\n* Section 11. Object Detection\n* Section 12. Vision Foundation Models\n* Section 13. Object Tracking\n* [Section 14. 3D Vision](https://github.com/mint-lab/cv_tutorial/blob/master/slides/14_3d_vision.pdf)\n  * Acknowledgement) Many slides about NeRF are adopted from [NeRF Tutorial](https://sites.google.com/berkeley.edu/nerf-tutorial/) (ECCV 2022).\n\n\n\n### Example Codes\n* **Section 1. Introduction** [[slides]](https://github.com/mint-lab/cv_tutorial/blob/master/slides/01_introduction.pdf)\n  * Note) How to install prerequisite packages in Python: `pip install -r requirements.txt`\n\n* **Section 2. Image Editing: Learning OpenCV** [[slides]](https://github.com/mint-lab/cv_tutorial/blob/master/slides/02_image_editing.pdf)\n  * OpenCV Image Representation\n    * Image creation: [image_creation.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/image_creation.py) :bulb:\n  * OpenCV Image and Video Input/Output\n    * Image file viewer: [image_viewer.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/image_viewer.py) :wrench:\n    * Image format converter: [image_converter.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/image_converter.py) :wrench:\n    * Video file player: [video_player.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/video_player.py) :wrench:\n    * Video format converter: [video_converter.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/video_converter.py) :wrench:\n  * OpenCV Drawing Functions\n    * Shape drawing: [shape_drawing.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/shape_drawing.py) :wrench:\n  * OpenCV High-level GUI\n    * (Handling keyboard events) Video file player with frame navigation: [video_player+navigation.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/video_player%2Bnavigation.py) :wrench:\n    * (Handling mouse events) Free drawing: [free_drawing.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/free_drawing.py) :wrench:\n  * Image Editing\n    * Negative image and flip: [negative_image_and_flip.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/negative_image_and_flip.py) :bulb:\n    * Intensity transformation with contrast and brightness: [intensity_transformation.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/intensity_transformation.py) :bulb:\n    * (Image addition) Alpha blending: [alpha_blending.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/alpha_blending.py) :bulb:\n    * (Image addition) Background extraction: [background_extraction.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/background_extraction.py) :bulb:\n    * (Image subtraction) Image difference: [image_difference.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/image_difference.py) :bulb:\n    * (Image subtraction) Background subtraction: [background_subtraction.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/background_subtraction.py) :bulb:\n    * (Image crop) Image file viewer with the zoom window: [image_viewer+zoom.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/image_viewer%2Bzoom.py) :bulb:\n    * Image resize with backward value copy: [image_resize.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/image_resize.py) :bulb:\n    * Image rotation with backward/forward value copy: [image_rotation.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/image_rotation.py) :bulb:\n\n* **Section 3. Image Processing** [[slides]](https://github.com/mint-lab/cv_tutorial/blob/master/slides/03_image_processing.pdf)\n  * Intensity Transformation\n    * Image histogram: [histogram.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/histogram.py) :bulb:\n    * Contrast stretching with min-max stretching: [contrast_stretching.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/contrast_stretching.py) :bulb:\n    * Histogram equalization: [histogram_equalization.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/histogram_equalization.py) :wrench:\n  * Image Segmentation\n    * Thresholding: [thresholding.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/thresholding.py) :wrench:\n  * Image Filtering\n    * Image filtering with various kernels: [image_filtering.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/image_filtering.py) :bulb:\n    * Median filter: [median_filter.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/median_filter.py) :wrench:\n    * Sobel edge detection: [Sobel_edge.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/Sobel_edge.py) :bulb:\n    * Canny edge detection: [Canny_edge.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/Canny_edge.py) :wrench:\n    * Bilateral filter: [bilateral_filter.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/bilateral_filter.py) :wrench:\n  * Morphological Operations\n    * Morphological operations with various operations and kernels: [morpology.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/morpology.py) :wrench:\n    * Application) Background subtraction (foreground extraction): [background_subtraction.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/background_subtraction.py) :wrench:\n\n* **Section 4. Color** [[slides]](https://github.com/mint-lab/cv_tutorial/blob/master/slides/04_color.pdf)\n  * Color space conversion: [color_bgr2hsv.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/color_bgr2hsv.py) :wrench:\n  * Color histogram equalization: [histogram_equalization+color.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/histogram_equalization+color.py) :bulb:\n\n* **Section 5. Image Formation** [[slides]](https://github.com/mint-lab/cv_tutorial/blob/master/slides/05_image_formation.pdf)\n  * Getting Started with 2D\n    * 3D rotation conversion: [3d_rotation_conversion.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/3d_rotation_conversion.py) :camera:\n  * Pinhole Camera Model\n    * Object localization: [object_localization.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/object_localization.py) :camera:\n    * Image formation: [image_formation.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/image_formation.py) :camera::bulb: \n  * Geometric Distortion Models\n    * Geometric distortion visualization: [distortion_visualization.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/distortion_visualization.py) :camera:\n    * Geometric distortion correction: [distortion_correction.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/distortion_correction.py) :camera: [[result video]](https://youtu.be/HKetupWh4V8)\n  * Camera Calibration\n    * Camera calibration: [camera_calibration.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/camera_calibration.py) :camera:\n  * Absolute Camera Pose Estimation (a.k.a. perspective-n-point; PnP)\n    * Pose estimation (chessboard): [pose_estimation_chessboard.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/pose_estimation_chessboard.py) :camera: [[result video]](https://youtu.be/4nA1OQGL-ig)\n    * Pose estimation (book): [pose_estimation_book1.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/pose_estimation_book1.py) :camera:\n    * Pose estimation (book) with camera calibration: [pose_estimation_book2.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/pose_estimation_book2.py) :camera:\n    * Pose estimation (book) with camera calibration without initial $K$: [pose_estimation_book3.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/pose_estimation_book3.py) :camera: [[result video]](https://youtu.be/GYp4h0yyB3Y)\n\n* **Section 6. Image Geometry** [[slides]](https://github.com/mint-lab/cv_tutorial/blob/master/slides/06_image_geometry.pdf)\n  * Planar Homography\n    * Perspective distortion correction: [perspective_correction.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/perspective_correction.py) :camera:\n    * Planar image stitching: [image_stitching.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/image_stitching.py) :camera:\n    * 2D video stabilization: [video_stabilization.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/video_stabilization.py) :camera: [[result video]](https://youtu.be/be_dzYicEzI)\n  * Triangulation\n    * Triangulation: [triangulation.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/triangulation.py) :camera:\n\n* **Section 7. Solving Problems** [[slides]](https://github.com/mint-lab/cv_tutorial/blob/master/slides/07_solving_problems.pdf)\n  * Solving Linear Equations in 3D Vision\n    * Affine transformation estimation: [affine_estimation_implement](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/affine_estimation_implement.py) :camera: :bulb:\n    * Planar homography estimation: [homography_estimation_implement](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/homography_estimation_implement.py) :camera: :bulb:\n      * Appendix) Image warping using homography: [image_warping_implement.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/image_warping_implement.py) :camera: :bulb:\n    * Triangulation: [triangulation_implement.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/triangulation_implement.py) :camera: :bulb:\n  * Solving Nonlinear Equations in 3D Vision\n    * Absolute camera pose estimation: [pose_estimation_implement.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/pose_estimation_implement.py) :camera: :bulb:\n    * Camera calibration: [camera_calibration_implement.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/camera_calibration_implement.py) :camera: :bulb:\n\n* **Section 8. Image Correspondence** [[slides]](https://github.com/mint-lab/cv_tutorial/blob/master/slides/08_image_correspondence.pdf)\n  * Feature Points and Descriptors\n    * Harris corner: [harris_corner_implement.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/harris_corner_implement.py) :camera: :bulb:\n    * SuperPoint [[Github]](https://github.com/magicleap/SuperPointPretrainedNetwork)\n  * Feature Matching and Tracking\n    * Feature matching comparison: [feature_matching.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/feature_matching.py) :camera:\n    * SuperGlue [[Github]](https://github.com/magicleap/SuperGluePretrainedNetwork)\n    * Feature tracking with KLT tracker: [feature_tracking_klt.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/feature_tracking_klt.py) :camera:\n  * Outlier Rejection\n    * Line fitting with RANSAC: [line_fitting_ransac.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/line_fitting_ransac.py) :camera: :bulb:\n    * Planar homography estimation with RANSAC: [image_stitching_implement.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/image_stitching_implement.py) :camera: :bulb:\n  \n* **Section 9. Image Classification: CNN Backbones**\n* **Section 10. Image Segmentation**\n* **Section 11. Object Detection**\n* **Section 12. Vision Foundation Models**\n* **Section 13. Object Tracking**\n* **Section 14. 3D Vision** [[slides]](https://github.com/mint-lab/cv_tutorial/blob/master/slides/14_3d_vision.pdf)\n  * Structure-from-Motion\n    * COLMAP [[Homepage]](https://demuc.de/colmap/) [[Documentation]](https://colmap.github.io/) [[Github]](https://github.com/colmap/colmap)\n  * 3D Representations\n    * NeRF [[Homepage]](https://www.matthewtancik.com/nerf) [[Github]](https://github.com/bmild/nerf)\n\n\n\n\n### Authors\n* [Sunglok Choi](https://github.com/sunglok)\n\n\n\n### Acknowledgements\nThe authors thank the following contributors and projects.\n\n* Youngjin Hong: He reported two bugs in [image_rotation.py](https://github.com/mint-lab/cv_tutorial/blob/master/examples/image_rotation.py) and [object_localization.py](https://github.com/mint-lab/3dv_tutorial/blob/master/examples/object_localization.py).\n* [ImageProcessingPlace.com](https://www.imageprocessingplace.com/root_files_V3/image_databases.htm) for test images (`lena.tif`, `baboon.tif`, and `peppers.tif`)\n* [MOTChallenge](https://motchallenge.net/vis/PETS09-S2L1) for test images (`PETS09-S2L1-raw.webm`)\n* [Wikipedia](https://en.wikipedia.org/wiki/Salt-and-pepper_noise) for a test image (`salt_and_pepper.png`)\n* [OpenCV](https://github.com/opencv/opencv/tree/4.x/samples/data) for a test image (`sudoku.png`)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmint-lab%2Fcv_tutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmint-lab%2Fcv_tutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmint-lab%2Fcv_tutorial/lists"}