관심 영역을 지정한 후, 해당 영역을 반전시킨 부분을 이미지에 반영하는 코드이다. import cv2 import numpy as np img = cv2.imread('image.jpg') cv2.imshow('img', img) drag = False # drag 상태 defalut_x, default_y, w, h = -1,-1,-1,-1 # 좌표 blue = (255,0,0) def Mouse(event, x, y, flag, param): global drag, default_x, default_y, img # global variance if event == cv2.EVENT_LBUTTONDOWN: # 왼쪽 버튼 누름 drag = True default_x = x default_y = y eli..
데이터 분석 & 시각화/OpenCV 검색 결과
import cv2 import numpy as np import matplotlib.pyplot as plt 1. Convexity Defects 이전에 Convex Hull을 통해 Contour Points를 모두 포함하는 볼록체에 대해 살펴보았다. 그러면서 cv2.isContourConvex 함수를 통해 Contour에 볼록 결함(Convexity Defect)가 있는지 살펴보기도 하였다. 이번에는 단순히 해당 이미지가 볼록한지 아닌지를 판단하는 것 뿐만 아니라 볼록 결함이 있는, 즉 오목한 지점의 위치를 찾아보자. cv2.convexHull 함수를 통해 해당 Contours에서 볼록한 부분을 찾을 수 있다. 필요한 인자로는 points로 2차원 포인터들의 집합을 입력으로 받으며 cv2.findCo..
import cv2 import numpy as np import matplotlib.pyplot as plt import random Contour Hierarchy 이전에 findContours로 Contours Points와 Hierarhcy를 반환받는다고 하였다. Image에는 여러가지 Contours가 존재하고, 그 사이에는 상관관계가 존재하며, 그 관계를 Contours Hierarchy라고 한다. 이들의 상관관계를 통해서 Parent, Child 혹은 동등한 상관관계에서의 이웃을 파악할 수 있다. Contours를 찾다보면 해당 Contours가 독립적으로 존재하는 Contours일 경우도 있고 내부에 Contour가 존재하는 경우도 있다. 각각 동일한 수준에서 Contour가 존재하는 경우..
import cv2 import numpy as np import matplotlib.pyplot as plt Contours Feature img = cv2.imread('cropped.jpg') img_copy = img.copy() img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) res, thr = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY) contours, _ = cv2.findContours(thr, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cnt = contours[1] cv2.drawContours(img_copy, [cnt], -1, (0, 255, 0), 2) plt...
import cv2 import numpy as np import matplotlib.pyplot as plt Contour Features 1. Contour Approximation (Contour 근사) cv2.findContours 함수를 통해 찾은 Contours line에는 각각의 Contours point를 가지고 있다. 보통은 이 Point를 drawContours 함수를 이용하여 Line을 그리게 된다. 이 때 우리가 지정한 정밀도에 따라 Point의 꼭짓점의 수를 줄여가면서 기존의 Contours line에 근사한 line을 그릴 수 있다. 이 Point의 수를 줄이는데 Douglas-Peucker 알고리즘을 사용한다. cv2.approxPolyDP(curve, epsilon, clos..
import cv2 import numpy as np import matplotlib.pyplot as plt Contours Contour는 동일한 색 또는 동일한 픽셀값(강도, intensity)을 가지고 있는 영역의 경계선 정보이다. 물체의 윤곽선, 외형을 파악하는데 사용된다. openCV의 findContour 함수로 이미지의 Contour 정보와 Contour 계층구조(hierarchy) 정보를 출력한다. 흑백 이미지 또는 이진화된 이미지에만 적용할 수 있다. findContours 함수로 반환받는 Contour 값은 Contour를 구성하는 점들로 이루어진 배열의 리스트로 len(contours)로는 hierarchy의 갯수를, len(contours[i])로는 각각의 hierarchy를 이루..
import cv2 import numpy as np import matplotlib.pyplot as plt Contour Contour는 등고선이라는 뜻으로 같은 값을 가진 곳을 연결한 선이라고 생각하면 된다. 이미지에서 Contours는 동일한 색 또는 동일한 강도를 가지고 있는 영역의 경계선을 연결한 선이다. 물체의 모형 분석이나 객체 감지 및 인식 알고리즘에 주로 사용하는 툴이다. 1. 정확도를 높이기 위해 주로 Binary 이미지를 사용한다. 그래서 Contours를 찾기 전에 threshold나 Canny 경계선 탐지 등을 이미지에 먼저 적용한다. 2. cv2.drawContours() 함수는 원본 이미지를 직접 수정하기 때문에, 원본 이미지를 보존하려면 copy() 함수를 사용해야 한다. ..
import cv2 import numpy as np import matplotlib.pyplot as plt 이미지 피라미드 (Image Pyramids) 이미지의 스케일(scale)과 해상도를 조절하는 작업으로 동일한 이미지를 가지고 여러 다양한 크기로 조절하여 작업할 필요가 있을 때도 있다. 예를 들어 이미지에서 사람의 얼굴과 같이 객체에서 특정한 무언가를 탐색하려고 할 때가 대표적이다. 우리가 확보한 얼굴 이미지가 있다고 가정하자. 다른 이미지에서 이 얼굴과 동일한 이미지를 탐색한다고 할 때, 우리가 가진 이미지에서 얼굴 크기와 다른 이미지에서 보이는 얼굴 크기가 다를 수 있다. 이럴 경우에는 탐색 대상 이미지의 해상도를 다단계로 만들어 각 단계에서 얼굴을 탐색하면 좀 더 나은 결과를 보일 수 있..
import cv2 import numpy as np import matplotlib.pyplot as plt Canny Edge Detection 경계선 검출 방식에서 가장 많이 사용하는 알고리즘이다. 일반적으로 경계선 검출기는 잡음에 매우 민감한 특성을 가지고 있다. 따라서 잡음으로 인해 잘못된 경계선을 계산하는 것을 방지하기 위해 개발 된 알고리즘이다. Canny 알고리즘은 다음의 5가지 단계를 거친다. 1. Gaussian Filter로 이미지의 잡음을 제거한다. 2. Sobel Filter를 사용하여 Gradient의 크기(intensity)를 구한다. 3. Non-maximum suppression을 적용하여 경계선 검출기에서 거짓 반응을 제거한다. 4. 경계선으로써 가능성 있는 픽셀을 골라내..
import cv2 import numpy as np import matplotlib.pyplot as plt 이미지 그라디언트 (Image Gradients) 그라디언트(Gradient)는 기울기, 증감, 변화도, 즉 변화하는 정도를 나타내는 단어이다. 이미지 내에서 픽셀값의 변화가 가장 큰 부분은 일반적으로 경계선(edge) 및 모서리(corner)부분이다. 따라서 Image Processing에서는 이를 잘 이용하여 영상의 경계선(edge) 및 그 방향을 찾는 용도로 활용된다. Edge Detection 변화하는 정도는 수학적으로 미분과 관련이 깊다. 이미지는 2차원이기 때문에 수직 방향과 수평 방향으로 미분해주면 수직 방향으로 어떻게 변화하는지, 또는 수평 방향으로 어떻게 변화하는지 알 수 있다...
최근댓글