Python OpenCV - cv2 사용하기2

BANG·2020년 11월 28일
0

OpenCV

목록 보기
6/16

이미지 크기 변경하기

보간법 : 알려진 값을 가진 두 점 사이 어느 지점의 값이 얼마일지를 추정
참고 사이트 : 보간법 이해하기

import cv2
 
path = "/home/test/test/data/lena.jpg"
 
src = cv2.imread(path)
size = (256, 256)
 
# cv2.resize(원본 이미지, 결과 이미지 크기, 보간법)
dst = cv2.resize(src, dsize=size, interpolation=cv2.INTER_AREA)
 
# 결과 이미지 크기가 (0, 0)으로 크기를 설정하지 않은 경우,
# fx와 fy를 이용하여 이미지의 비율을 조절
dst2 = cv2.resize(src, dsize=(0, 0), fx=0.8, fy=0.8, interpolation=cv2.INTER_LINEAR)
 
cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.imshow("dst2", dst2)
 
cv2.waitKey(0)
cv2.destroyAllWindows()

import sys
import numpy as np
import cv2
 
# 이미지 읽어오기
src = cv2.imread('rose.bmp') # src.shape=(320, 480)
 
if src is None:
    print('Image load failed!')
    sys.exit()
 
# 크기 변경하기
# 보간법의 기본값은 cv2.INTER_LINEAR
dst1 = cv2.resize(src, (0, 0), fx=4, fy=4, interpolation=cv2.INTER_NEAREST)
dst2 = cv2.resize(src, (1920, 1280))  # cv2.INTER_LINEAR
dst3 = cv2.resize(src, (1920, 1280), interpolation=cv2.INTER_CUBIC)
dst4 = cv2.resize(src, (1920, 1280), interpolation=cv2.INTER_LANCZOS4)
 
# 이미지 보여주기
cv2.imshow('src', src)
cv2.imshow('dst1', dst1[500:900, 400:800])
cv2.imshow('dst2', dst2[500:900, 400:800])
cv2.imshow('dst3', dst3[500:900, 400:800])
cv2.imshow('dst4', dst4[500:900, 400:800])
 
cv2.waitKey()
cv2.destroyAllWindows()

이미지 자르기

  • roi(관심영역) 지정과 같음
import cv2
 
path = "/home/test/test/data/lena.jpg"
 
src = cv2.imread(path)
 
dst = src.copy()
 
# [y start: y end, x start : x end]
dst = src[100:600, 200:700]
 
cv2.imshow("src", src)
cv2.imshow("dst", dst)
 
cv2.waitKey(0)
cv2.destroyAllWindows()

이미지 회전시키기

  • 특정 좌표를 기준으로 회전
import cv2
 
path = "/home/test/test/data/lena.jpg"
 
src = cv2.imread(path)
height, width, channel = src.shape
 
# matrix에 회전 배열을 생성하여 할당
# cv2.getRotationMatrix2D((중심점 X좌표, 중심점 Y좌표), 각도, 스케일)
# 중심점 : Tuple형태로 사용하며 회전할 기준점을 설정
# 각도 : 회전할 각도
# 스케일 : 이미지의 확대 비율
matrix = cv2.getRotationMatrix2D((width/2, height/2), 45, 1)
 
# 결과 이미지(dst)를 변수에 회전 함수를 호출
# cv2.warpAffine(원본 이미지, 배열, (결과 이미지 너비, 결과 이미지 높이))
# matrix에 따라 이미지가 회전
dst = cv2.warpAffine(src, matrix, (width, height))
 
cv2.imshow("src", src)
cv2.imshow("dst", dst)
 
cv2.waitKey()
cv2.destroyAllWindows()

import sys
import math
import numpy as np
import cv2
 
# 이미지 읽어오기
src = cv2.imread('tekapo.bmp')
 
if src is None:	# 이미지 상태 체크
    print('Image load failed!')
    sys.exit()
 
rad = 20 * math.pi / 180
aff = np.array([[math.cos(rad), math.sin(rad), 0],
                [-math.sin(rad), math.cos(rad), 0]], dtype=np.float32)
 
dst = cv2.warpAffine(src, aff, (0, 0))
 
cv2.imshow('src', src)	# 이미지 보여주기
cv2.imshow('dst', dst)
 
cv2.waitKey()
cv2.destroyAllWindows()

import sys
import numpy as np
import cv2
 
# 이미지 읽어오기
src = cv2.imread('tekapo.bmp')
 
if src is None:	# 이미지 상태 체크
    print('Image load failed!')
    sys.exit()
 
cp = (src.shape[1] / 2, src.shape[0] / 2)
rot = cv2.getRotationMatrix2D(cp, 20, 0.5)
 
dst = cv2.warpAffine(src, rot, (0, 0))
 
cv2.imshow('src', src)	# 이미지 보여주기
cv2.imshow('dst', dst)
 
cv2.waitKey()
cv2.destroyAllWindows()

이미지 필터 걸기(blur)

import cv2
 
path = "/home/test/test/data/lena.jpg"
 
src = cv2.imread(path)
# 흐릿하게 문대기
# (4, 4)크기만큼 <-- 해당 숫자가 클 수록 더 흐릿하게 됨
dst1 = cv2.blur(src, (4, 4), anchor=(-1, -1), borderType=cv2.BORDER_DEFAULT)
dst2 = cv2.blur(src, (9, 9), anchor=(-1, -1), borderType=cv2.BORDER_DEFAULT)
 
cv2.imshow("dst1", dst1)
cv2.imshow("dst2", dst2)
 
cv2.waitKey(0)
cv2.destroyAllWindows()
profile
Record Everything!!

0개의 댓글