본문 바로가기

Python OpenCV

(17)
마스크 연산과 ROI 🙋‍♂️ 오늘은 마스크 연산과 ROI에 대해서 공부한 내용을 정리합니다! ✅ 예제 코드 import sys import cv2 # 마스크 영상을 이용한 영상 합성 # 원본 이미지 src = cv2.imread('airplane.bmp', cv2.IMREAD_COLOR) # 원본 이미지에서 객체를 제외한 배경을 따온 이미지 mask = cv2.imread('mask_plane.bmp', cv2.IMREAD_GRAYSCALE) # mask 이미지를 붙힐 배경이 될 dst 이미지 dst = cv2.imread('field.bmp', cv2.IMREAD_COLOR) if src is None or mask is None or dst is None: print('Image load failed!') sys.exi..
영상의 생성, 복사, 부분 영상 추출 🙋‍♂️ 오늘은 영상의 생성, 복사, 부분 영상 추출에 대해서 공부한 내용을 정리합니다! ✅ 예제 코드 (새 영상 생성하기) import numpy as np import cv2 img1 = np.empty((240, 320), dtype=np.uint8) # grayscale image # 결과: 임의의 값으로 채워진 320 x 240 크기의 이미지 img2 = np.zeros((240, 320, 3), dtype=np.uint8) # color image # 결과: 0 으로 채워진 320 x 240 크기의 컬러 이미지 img3 = np.ones((240, 320), dtype=np.uint8) * 255 # dark gray # 결과: 1로 채워진 320 x 240 크기의 이미지를 만든 후 255 를..
영상의 속성과 픽셀 값 처리 🙋‍♂️ 오늘은 영상의 속성과 픽셀 값 처리에 대해서 공부한 내용을 정리합니다! ✍ OpenCV는 영상데이터를 numpy.ndarray로 표현하며 사용할 수 있는 크게 4가지의 속성이 있습니다. 1. ndim: 차원 수로써 len(img.shpae)과 같으며 GrayScale의 경우 2를 Color의 경우 3을 반환합니다. 2. shape: 각 차원의 크기로써 (h,w) 또는 (h,w,3)로 반환하며 png의 경우에는 alpha 성분을 포함하여 (h,w,4)를 반환합니다. 3. size: 전체 원소의 갯수로써 (이미지를 구성하고 있는 pixel의 전체 개수라고 표현합니다.) 4. dtype: 원소의 데이터 타입으로써 일반적인 영상 데이터는 uint8이며 이미지에 따라 다를 수 있습니다. ✍ 아래의 코드는..
잡음 제거(Denoised) ✍ 오늘은 잡음 제거(Denoised)를 하는 방법 중에서 평균값 필터(Median Filter), 양방향 필터(Bilateral Filter) 에 대해서 글로 남기려 합니다. 🙋‍♂️ 영상의 잡음 이란? ✍ 영상의 픽셀 값에 추가되는 원치 않는 형태의 신호로써 수식은 아래와 같습니다. $$ f(x, y) = s(x, y) + n(x, y) $$ ✍ 수식을 보게 되면 아시다시피 입력 영상( s(x, y) )과 별개로 잡음 ( n(x, y) )가 추가된 것을 알 수 있습니다. 🙋‍♂️ 잡음의 종류 란? ✍ 잡음의 종류는 여러 가지가 있지만 크게 두 가지로써 1. 소금 & 후추 잡음 (Salt & Pepper Noise) 2. 가우시안 잡음 (Gaussian Noise) 가 있습니다. 🙋‍♂️ 평균값 필터(..
필터링(Filtering) ✍ 오늘은 평균값 필터(Mean Filter), 가우시안 필터(Gaussian Filter), 언샤프 마스크 필터(Unsharp Mask Filter) 에 대해서 글로 남기려 합니다. 🙋‍♂️ 필터링(Filtering) 이란? ✍ 영상에서 필요한 정보만 통과시키고 원치 않는 정보는 걸러내는 작업으로써 필터링에는 크게 두 가지인 주파수 공간의 필터링(Frequency Domain Filtering)과 공간적 공간의 필터링(Spatial Domain Filtering)이 있습니다. 🙋‍♂️ 주파수 공간의 필터링(Frequency Domain Filtering) 이란? ✍ FFT(Fast Fourier Transform)을 이용하여 Filtering을 하는 방식으로써 푸리에 변환을 마친 이미지에서는 안쪽이 저..
모폴로지(Morphology) ✍ 오늘은 침식, 팽창, 열기 & 닫기에 대해서 글로 남기려 합니다. 🙋‍♂️ 모폴로지(Morphology) 연산이란? ✍ 영상을 형태학적인 측면에서 다루는 기법으로써 다양한 영상 처리 시스템에서 전처리(Pre-Processing) 혹은 후처리(Post-Processing) 형태로 자주 사용되곤 합니다. ✍ 구조 요소(Structuring element) : 모폴로지 연산의 결과를 결정하는 Kernel 혹은 Mask가 존재합니다. 🙋‍♂️ 침식(Erosion) 연산이란? ✍ 구조 요소가 객체 영역 내부에 완전히 포함될 경우에 만 고정점 픽셀을 255로 변환해주는 연산으로써 하얀색 객체를 기준으로 객체의 외각을 깎아내는 연산이라고 생각하면 됩니다. 따라서 객체의 크기는 감소하지만 배경은 확대되는 연산입니다..
이진화(Binarization) ✍ 오늘은 이진화, 자동 이진화(Otsu), 지역 이진화에 대해서 글로 남기려 합니다. 🙋‍♂️ 이진화(Binarization) 란? ✍ 영상의 각각의 픽셀 값을 0 또는 255로 만드는 연산으로써 배경과 객체를 구분하기 위한 경우에 많이 사용합니다. ✍ 이진화는 보통 그레이 스케일의 입력 이미지를 받아 사용하며 대표적으로 T : 임계값, 문턱 치, Threshold라고 불리는 값으로 조절하며 수식은 아래와 같습니다. g(x, y) = { 0 if f(x, y) T ✅ 이미지 비교 ✅ 구현 소스 import sys import cv2 src = cv2.imread("cells.png", cv2.IMREAD_GRAYSCALE) if src is None: print("Image load failed !!"..
화소 처리(Point Processing) 🙋‍♂️ 화소 처리(Point Processing) 란? ✍ 입력 영상의 특정 좌표 픽셀 값을 변경하여 출력 영상의 해당 좌표 픽셀 값을 설정하는 연산으로써 대표적인 예시로는 밝기 조절, 명암비 조절, 등 이 있습니다. ✍ 오늘은 밝기 조절, 명암비 조절(Normalize), 평활화(Equalize)에 대하여 공부하여 글로 남기려 합니다. ✏️ 밝기 조절 이란? ✍ 영상 전체를 더욱 밝게 만들거나 더욱 어둡게 만드는 연산으로써 수식은 아래와 같습니다. $$ dst(x, y) = src(x, y) + n $$ ✅ 이미지 비교 ✅ 구현 소스 import sys import cv2 import numpy as np from cv2 import IMREAD_GRAYSCALE src = cv2.imread('ca..