▶ 영상의 변환
영상의 변환(Image Transformation) 이란 영상의 형태, 크기, 밝기, 색상 등을 변경하여 새로운 영상으로 변환하는 과정으로, 컴퓨터 비전에서 다양한 전처리 및 후처리에 활용됩니다.
OpenCV에서는 대표적으로 기하학적 변환(Geometric Transformation) 과 강도 변환(Intensity Transformation) 을 제공합니다.
기하학적 변환에는 확대/축소(Scaling), 회전(Rotation), 이동(Translation), 투시 변환(Perspective Transform) 등이 있으며, cv2.warpAffine()과 cv2.getPerspectiveTransform()을 통해 수행할 수 있습니다.
강도 변환은 픽셀 값의 변화를 조정하는 방법으로 명암 조절, 히스토그램 평활화, 이진화(Thresholding) 등이 있으며, cv2.equalizeHist(), cv2.threshold(), cv2.adaptiveThreshold() 등이 이에 해당합니다.
직접 코드로 구현해보자면 아래와 같습니다.
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('D:/PJ/DLHJ/dog.bmp')
aff = np.array([[1,0,150], [0,1,100]], dtype=np.float32)
dst = cv2.warpAffine(img, aff, (0,0))
cv2.imshow('img1', img)
cv2.imshow('dst', dst)
cv2.waitKey()
여기서 aff라는 변수를 보면 현재
인 형태로 되어있는데 왼쪽 사진처럼 1,0과 아래줄의 0,1이 교차시키게되면 오른쪽에 있는 값으로 이동시키게 됩니다.
영상에다가 마스크처럼 연산해주는게 됩니다! 평행의동느낌
왼쪽 행렬이 계산 행렬이라는점!
이거 평행이동하는 공식같은것~알아두기..
어떤 사진을 찍게되면 필터 씌우는거 얻게되면 특정하나의 행렬이되는거라서 달라진다
▶ ReSize + interpolation 보간법
import cv2
img = cv2.imread('D:/PJ/DLHJ/dog.bmp')
dst1 = cv2.resize(img, (1280, 1024), interpolation=cv2.INTER_NEAREST)
dst2 = cv2.resize(img, (1280, 1024), interpolation=cv2.INTER_CUBIC)
cv2.imshow('img', img)
cv2.imshow('dst1', dst1[400:800, 200:600])
cv2.imshow('dst2', dst2[400:800, 200:600])
cv2.waitKey()
강아지 원래 이미지는 548*364 이다.
CV2로 가져오면 364*548이 되겠죠? 그다음에 제가 화면을 늘리기 위해서 보간법(interpolation)으로 하고
cv2.INTER_NEAREST와 CUBIC을 써보았습니다.
또한 보여지는 부분은 슬라이싱을 해서 좀 잘라서 가져올 수 있습니다.
DST1은 INTER_NEAREST이고
DST2는 CUBIC 입니다. 자세히보면 DST2가 좀 더 부드러운 부분이 보입니다.
즉 보간법은 픽셀을 다루는 기술입니다.
cv2.INTER_NEAREST : 가장 가까운 이웃의 픽셀 값을 사용하여 리사이즈해줌! (연산량 적고 계산이 빠르나, 확대시 계단현상이 발생될 수 있음)
cv2.INTER_CUBIC : 주변 16개 픽셀 값을 이용하여 리사이즈해주고 상대적으로 부드럽고 자연스러운 결과를 얻을 수 있지만 계산량이 좀 많음!