목록AI/AI_Python_OPENCV 기초 (11)
개발 공부
#이미지의 경계선을 찾아보자# Import the necessary packagesimport numpy as npimport argparseimport cv2 image = cv2.imread('coin.jpg')gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)blurred = cv2.GaussianBlur(gray, (11, 11), 0)cv2.imshow("Image", image) # The first thing we are going to do is apply edge detection to# the image to reveal the outlines of the coinsedged = cv2.Canny(blurred, 30, 150)cv2.imshow("Edg..
#가장 유명한 Edge Detection방법입니다. 여러 단계의 Algorithm을 통해서 경계를 찾아 냅니다. # Import the necessary packagesimport numpy as npimport argparseimport cv2 image = cv2.imread('coin.jpg')image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)image = cv2.GaussianBlur(image, (5, 5), 0)cv2.imshow("Blurred", image) # (image, 30, 150) 그레디언트 30은 최소값, 150은 최대값이다. canny = cv2.Canny(image, 30, 150)cv2.imshow("Canny", canny)cv2.wai..
#위 이미지는 코인을 주변가 정확하게 분리해내지 못하고 있다. 조금 더 정확한 이미지 값을 얻기 위해 adaptiveThreshold 함수를 사용하자import numpy as npimport argparseimport cv2 image = cv2.imread('coin.jpg')image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)blurred = cv2.GaussianBlur(image, (5, 5), 0)cv2.imshow("Image", image) #위 함수의 결과를 보면 한가지 문제점이 있습니다. 임계값을 이미지 전체에 적용하여 처리하기 때문에 하나의 이미지에 음영이 다르면 일부 영역이 모두 흰색 또는 검정색으로 보여지게 됩니다.#이런 문제를 해결하기 위해서 이미..
#thresholding 임계값을 주어 이미지를 특징만 뽑아내 봅니다. 동전을 구분할 때 사용할 수 있습니다.#임계값이란 범위, 한도, 경계 등으로 이해될 수 있다. 변화가 나타나기 시작하는 시점을 말한다.#이진화 처리는 간단하지만, 쉽지 않은 문제를 가지고 있다. 이진화란 영상을 흑/백으로 분류하여 처리하는 것을 말합니다. 이때 기준이 되는 임계값을 어떻게 결정할 것인지가 중요한 문제가 됩니다. 임계값보다 크면 백, 작으면 흑이 됩니다. 기본 임계처리는 사용자가 고정된 임계값을 결정하고 그 결과를 보여주는 단순한 형태입니다. # Import the necessary packagesimport numpy as npimport argparseimport cv2 #동전 이미지로 해보자. cv2.cvtColo..
import numpy as npimport cv2 #이미지의 특정 부분만을 보여지게 할 수 없을까? 가능하다. 이것을 masking이라고 하는데 cv2.bitwise_and 함수를 사용하면 된다.#이것을 하기위해 opencv의 비트 연산 합수를 사용해봅니다. 비트연산은 이미지에서 특정 영역을 추출할 때 유용하게 사용된다. 예를 들면 이미지에서 바탕을 제거하고, 2개의 이미지를 합치는 경우입니다.image = cv2.imread('p2.jpg',cv2.IMREAD_UNCHANGED)cv2.imshow("Original", image) # 이미지를 위한 배열을 하나 만듭니다. 아래 보면 복잡하게 크기를 정하지요? #정중한 값을 정하기 위해서입니다. 도형의 정중앙에서 150픽셀크기의 사각형을 만듭니다.#cv..
#원과 박스를 서로 교차할 수 있다.import numpy as npimport cv2 #박스와 원을 그린다.rectangle = np.zeros((300, 300), dtype = "uint8")cv2.rectangle(rectangle, (25, 25), (275, 275), 255, -1)cv2.imshow("Rectangle", rectangle) # Secondly, let's draw a circlecircle = np.zeros((300, 300), dtype = "uint8")cv2.circle(circle, (150, 150), 150, 255, -1)cv2.imshow("Circle", circle) # AND로 하면 두 도형의 공통 부분만 나온다.bitwiseAnd = cv2.bitw..
import numpy as npimport cv2 image = cv2.imread('p2.jpg')cv2.imshow("Original", image) #크기를 알아보자height = image.shape[0]width = image.shape[1] print ('height', height)print ('width', width)# 가로 200 세로 200으로 사이즈를 바꾸어 봅니다.# cv2.resize(img, dsize, fx, fy, interpolation)에서 dsize는 가로 세로 사이즈입니다. fx는 가로 배수, fy는 세로 배수입니다. #fx와 fy는 dsize가 있으니 넣지 않습니다.resized = cv2.resize(image, (200,200), interpolation = ..
import numpy as npimport cv2 #기울기 등을 변경해서 여러 형식으로 테스트하기 위해 함수를 만듭니다.def rotate(image, angle, center = None, scale = 1.0): # 다음은 이미지의 높이와 넓이 정보를 가져 옵니다. [:2]는 [0:2]와 같으면 0부터 1까지 이미지 배열값을 말합니다. h는 높이를 받는 변수이며 w는 넓이를 받는 변수입니다. (h, w) = image.shape[:2] # If the center is None, initialize it as the center of # the image if center is None: center = (w / 2, h / 2) #사용하는 함수는 cv2.getRotationMatrix2D(중심값,..
#이미지를 잘라서 이동하는 것을 해보자.# Import the necessary packagesimport numpy as npimport cv2 # 동일 작업이 반복되므로 함수를 하나 만들자.def shift(image, x, y): # Define the translation matrix and perform the translation #float32를 사용한다. float32는 부동 소수를 말하는데 컴퓨터에서는 자리수를 줄이기 위해 뒤를 생락해버리고 단축하여 표현한다. 물론 오차가 나지만 빠른 계산이 필요하고 오차를 허용하는 경우 사용한다. #예를 들면 100000000이라면 1.0 E8이라고 표현해버린다. float32는 32비트 가운데 E을 첫번째 부호비트 자리 뒤에 8비트에 넣고 나머지 숫자..
# USAGE# python drawing.py # Import the necessary packages#numpy는 파이션을 위한 수학 라이브러리라 생각하면 된다. numpy라고 길게 쓰면 힘드니 np라고 줄여서 쓰자,.import numpy as npimport cv2 # Initialize our canvas as a 300x300 with 3 channels,# Red, Green, and Blue, with a black background#np.zeros는 모두 공백으로 채운다는 의미다. 빈 종이로 만든다는 거다. 처음의 (300,300,3)은 300 * 300 픽셀 크기와 3채널(RGB 3가지 색을 사용한다는 의미)을 사용한다는 것이며 dtype는 데이터 타입을 말한다.#데이터 타입은 종류가..