본문 바로가기

Python OpenCV

(17)
어파인 변환과 투시 변환 🙋‍♂️ 오늘은 어파인 변환과 투시 변환에 대해서 공부한 내용을 정리합니다! ✍ 어파인 변환(Affine Transfom) 이란? 2 * 3의 행렬을 가진 것이 특징으로써 직사각형의 영상이 평행사변형 형태 혹은 크게 달라지지 않는 것이 특징입니다. ✍ 투시 변환(Perspective Transfom) 이란? 3 * 3의 행렬을 가진 것이 특징으로써 직사각형의 영상이 사다리꼴 형태 혹은 Affine Transform 보다 자유도가 더 높다는 것이 특징입니다. ✅ 예제 코드 import sys import numpy as np import cv2 src = cv2.imread('namecard2.jpg') if src is None: print('Image load failed!') sys.exit() w,..
이미지 피라미드 🙋‍♂️ 오늘은 이미지 피라미드에 대해서 공부한 내용을 정리합니다! ✍ 이미지 피라미드 (Image pyramid) 란? 1. 하나의 영상에 대해 다양한 해상도의 영상 세트를 구성한 것 2. 다운샘플링: 이미지를 점차 줄여나가는 샘플링 3. 업샘플링: 이미지를 점차 크게 키워나가는 샘플링 ✅ 예제 코드 import sys import numpy as np import cv2 src = cv2.imread('cat.bmp') if src is None: print('Image load failed!') sys.exit() rc = (250, 120, 200, 200) # rectangle tuple # 원본 영상에 그리기 cpy = src.copy() cv2.rectangle(cpy, rc, (0, 0, ..
영상의 확대와 축소 🙋‍♂️ 오늘은 영상의 확대와 축소에 대해서 공부한 내용을 정리합니다! ✍ 영상의 크기 변환(Scale transformation) 이란? 1. 영상의 크기를 원본 영상보다 크게 또는 작게 만드는 변환 2. x축과 y축 방향으로의 스케일 비율 (scale factor)를 지정 ※ 추가적으로 영상을 축소 시에는 interpolation=cv2.INTER_AREA가 효과적입니다! ✅ 예제 코드 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() # 속도: NEAREST > LINEAR > CUBIC..
영상의 이동 변환과 전단 변화 🙋‍♂️ 오늘은 영상의 이동 변환과 전단 변환에 대해서 공부한 내용을 정리합니다! ✍ 영상의 기하학적 변환 (Geometric Transformation) 이란? 영상을 구성하는 픽셀의 배치 구조를 변경함으로써 전체 영상의 모양을 바꾸는 작업을 말합니다. 📝 영상의 이동 변환 (Translation Transformation) ✅ 예제 코드 import sys import numpy as np import cv2 src = cv2.imread('tekapo.bmp') if src is None: print('Image load failed!') sys.exit() aff = np.array([[1, 0, 200], [0, 1, 100]], dtype=np.float32) h, w = src.shape[:..
특정 색상 영역 추출하기 🙋‍♂️ 오늘은 특정 색상 영역 추출하기에 대해서 공부한 내용을 정리합니다! ✍ 이전에 제 블로그에서 썼던 글인 "컬러 영상 처리와 색 공간"이라는 내용에서 RGB 혹은 BGR보다 일반적인 컬러 영상처리에서는 HSV, YCrCb, LAB을 더 많이 사용한다고 작성하였습니다. 이와 관련하여 특정 색상 영역을 추출할 시에 왜 HSV가 더 좋은지 정리해 보도록 하겠습니다. 🖼️ 예시 이미지 ✍ 위 예시이미지는 원본 이미지와 밝기를 낮춘 이미지로써 초록색을 추출하여 결과를 보도록 하겠습니다. 🖼️ 결과 이미지 (BGR) ✍ 위 결과 사진과 같이 원본 이미지와 밝기를 낮춘 이미지에서 초록색을 똑같은 Parameter로 추출 시에 일부 영역에서는 초록색을 정확히 추출하지 못하는 현상을 확인할 수 있습니다. 왜일까요..
히스토그램 분석 🙋‍♂️ 오늘은 히스토그램 분석에 대해서 공부한 내용을 정리합니다! ✅ 예제 코드 (GrayScale 영상과 Color 영상의 Histogram 생성) import sys import numpy as np import matplotlib.pyplot as plt import cv2 # 그레이스케일 영상의 히스토그램 src = cv2.imread('lenna.bmp', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load failed!') sys.exit() hist = cv2.calcHist([src], [0], None, [256], [0, 256]) cv2.imshow('src', src) cv2.waitKey(1) plt.plot(hist) plt.sh..
컬러 영상 처리와 색 공간 🙋‍♂️ 오늘은 컬러 영상 처리와 색 공간에 대한 공부한 내용을 정리합니다! ✍ OpenCV는 컬러 영상데이터의 경우 GrayScale 영상과 동일하게 numpy.ndarray로 표현하며 단, OpenCV에서는 RGB 순서가 아니라 BGR 순서를 기본적으로 사용하고 있습니다. ✅ 예제 코드 import cv2 import numpy as np # Color 영상을 불러오기 위해선 인자를 cv2.IMREAD_COLOR로 설정 img1 = cv2.imread('lenna.bmp', cv2.IMREAD_COLOR) # 영상 전체를 0값으로하는 컬러 영상을 만들고 컬러 영상위에 도형 그리기 img2 = np.zeros((480, 640, 3), np.uint8) pts = np.array([[250, 200],..
OpenCV 그리기 함수 🙋‍♂️ 오늘은 OpenCV 그리기 함수에 대해서 공부한 내용을 정리합니다! ✅ 예제 코드 import numpy as np import cv2 # 255로 채워진 400 * 400 사이즈의 이미지를 만든다. img = np.full((400, 400, 3), 255, np.uint8) # start X,Y End X,Y의 좌표를 설정 후 그린다. cv2.line(img, (50, 50), (200, 50), (0, 0, 255), 5) cv2.line(img, (50, 60), (150, 160), (0, 0, 128)) # 사각형의 상단 왼쪽 X,Y와 하단 오른쪽 X,Y의 좌표 설정 후 그린다. cv2.rectangle(img, (50, 200, 150, 100), (0, 255, 0), 2) cv2..