개발 공부
3강 본문
#이미지를 잘라서 이동하는 것을 해보자.
# 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 |