Watershed 알고리즘을 사용하여 영상 분할(Image segmentation) 하는 방법에 대해 설명합니다. 다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/4.0.1/d6/d00/tutorial_py_root.html 그레이스케일 이미지에서 높은 픽셀값을 가지는 부분을 언덕으로 보고, 낮은 픽셀값을 가지는 부분을 계곡으로 볼 수 있습니다. 한 이미지에 여러 개의 고립된 계곡(극소점)이 있을 수 있습니다. 각각 다른 색의 물(라벨)로 물을 채운다고 합시다. 수위가 상승함에 따라 다른색의 물로 채워지던 계곡들이 하나로 합쳐질 수 있습니다. 이것을 방지하기 위해 물이 합류되는 지점에 벽을 쌓습니다. 모든 언덕이 물에 잠..
거리 변환(Distance Transform)은 바이너리 이미지(Binary Image)에서 픽셀값이 0인 배경으로부터의 거리를 픽셀값이 255인 영역에 표현하는 방법입니다. 배경으로부터 멀리 떨어져 있을 수록 높은 픽셀 값을 가집니다. 실제 실행 결과입니다. 직사각형의 경우 배경으로부터 일정거리 떨어진 영역인 중앙에 일직선으로 밝은 부분이 생깁니다. cv.distanceTransform 함수의 결과를 문자열로 출력해보아도 대각선으로 밝은 부분이 높은 값을 갖지 않아서 이상합니다. 원의 경우 중앙으로 갈수록 픽셀값이 높아지기 때문에 중앙이 흰색입니다. 테스트에 사용한 코드입니다. import cv2 as cv import numpy as np img = cv.imread('rectangle.jpg') g..
이번 포스팅에서는 템플릿 매칭을 사용하여 이미지상에서 오브젝트를 찾는 방법을 다룹니다. 다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/4.0.1/d6/d00/tutorial_py_root.html 템플릿 매칭 구현은 다음 링크를 참고하세요. OpenCV 강좌 - 템플릿 매칭(Template Matching) 구현https://webnautes.tistory.com/1349 마지막 업데이트 2019. 1. 3 템플릿 매칭은 입력 이미지에서 템플릿 이미지의 위치를 찾는 방법입니다. OpenCV에서는 템플릿 매칭을 위해 cv.matchTemplate() 함수를 제공합니다. 2차원 컨볼루션처럼 템플릿 이미지를 입력 이미지상 위..
Hough Line Transform 구현 원리에 대해서 다룹니다. 유튜브에서 사용한 코드입니다. import cv2 as cv import numpy as np import math import time img_original = cv.imread('square.jpg', cv.IMREAD_COLOR) img_gray = cv.cvtColor(img_original, cv.COLOR_BGR2GRAY) img_edge = cv.GaussianBlur(img_gray, (5, 5), 0, 0) img_edge = cv.Canny(img_edge, 50, 150, 3) height = img_edge.shape[0] width = img_edge.shape[1] tmp = min(height, width) ..