개발 공부

3강 본문

AI/AI_Python_OPENCV 기초

3강

아이셩짱셩 2018. 8. 7. 21:29

#이미지를 잘라서 이동하는 것을 해보자.

# Import the necessary packages

import numpy as np

import cv2


# 동일 작업이 반복되므로 함수를 하나 만들자.

def shift(image, x, y):

   # Define the translation matrix and perform the translation

   #float32를 사용한다. float32는 부동 소수를 말하는데 컴퓨터에서는 자리수를 줄이기 위해 뒤를 생락해버리고 단축하여 표현한다. 물론 오차가 나지만 빠른 계산이 필요하고 오차를 허용하는 경우 사용한다.

   #예를 들면 100000000이라면 1.0 E8이라고 표현해버린다. float32는 32비트 가운데 E을 첫번째 부호비트 자리 뒤에  8비트에 넣고 나머지 숫자인 1.0을 뒤의 23비트에 넣게 된다.

   #flost32는 앞에 부호 부분 1비트 가수 부분 8비트(E10을 가수라고 한다) 지수 부분(원 숫자 1.0을 지수라고 한다)으로 구성되어 총 32비트 짜리다.

   #주의할 것은 파이션의 float32와 numpy의 float32는 다르다는 것. numpy가 줄이는 것과 다르게 파이션은 그대로 저장 출력한다.

   #아래 M은 float32로 배열을 만든겁니다. 첫번째 [1,0,x]는 말그대로 x 좌표값의 배열이고 뒤는 y좌표값의 배열입니다. 

   #cv2.warpAffine함수는 2D 이미지를 처리할 수 있도록 변환하는 함수다. 형식은 다음과 같다. cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) 

   #image는 처리할 이미지, M은 배열, shape[1]은 width, shape[0]은 height. 

   M = np.float32([[1, 0, x], [0, 1, y]])

   shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))


   # Return the translated image

   return shifted


# Load the image and show it

image = cv2.imread('p2.jpg',cv2.IMREAD_UNCHANGED)

cv2.imshow("Original", image)


#x값에 0를 주고 y에 25을 주면 

shifted = shift(image, 0, 25)

cv2.imshow("Shifted Down and Right", shifted)


# Now, let's shift the image 50 pixels to the left and

# 90 pixels up. We accomplish this using negative values

shifted = shift(image, -50, -90)

#함수를 안 쓰는 경우는 다음과 같이 된다.

#M = np.float32([[1, 0, -50], [0, 1, -90]])

#shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

cv2.imshow("Shifted Up and Left", shifted)


# Finally, let's use our helper function in imutils.py to

# shift the image down 100 pixels

shifted = shift(image, 0, 100)

cv2.imshow("Shifted Down", shifted)

cv2.waitKey(0)

'AI > AI_Python_OPENCV 기초' 카테고리의 다른 글

6강  (0) 2018.08.07
5강  (0) 2018.08.07
4강 이미지 회전  (0) 2018.08.07
2강 선 원 박스 그리기  (0) 2018.08.07
1강  (0) 2018.08.07
Comments