가우시안 필터 + 미분연산
dx=1, dy=0, ksize=3 인 경우 커널은 다음과 같음
dst = cv.Sobel(src, ddepth, dx, dy, ksize=ksize)
dst = cv.Laplacian(src, ddepth, ksize=ksize)
궁극의 에지 검출 알고리즘
5x5 가우시안 필터로 노이즈 제거
Sobel 커널로 edge gradient의 방향과 크기 계산
각 픽셀에 대해서 gradient 방향의 neigbor중에 최대값이 아니라면 0으로 놓음
gradient 값이 maxVal 이상이면 edge로 판단, minVal 이하이면 egde가 아니라고 판단. 그 사이의 값이면 이미 판단된 edge와 연결되있는지 여부로 판단
edges = cv.Canny(image, threshold1, threshold2, apertureSize=3, L2gradient=false)
import cv2 src = cv2.imread("src/ex_codes/person.jpeg", cv2.IMREAD_COLOR) gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) canny = cv2.Canny(src, 100, 255) sobel = cv2.Sobel(gray, cv2.CV_8U, 1, 0, 3) laplacian = cv2.Laplacian(gray, cv2.CV_8U, ksize=3) img = cv2.hconcat((sobel,canny,laplacian)) cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows()