본문 바로가기
728x90

OpenCV/OpenCV-Chapter31

CH07 OpenCV-Python 이진화(Binarization) 영상의 이진화(Binarization)란? • 영상의 픽셀 값을 0 또는 255(1)로 만드는 연산 ▪ 배경(background) vs. 객체(object) ▪ 관심 영역 vs. 비관심 영역 * GrayScale 영상의 이진화 # 검은 객체 찾기 ''' OpenCV에선 '흰색이 객체다' 라고 정의 ''' src = cv2.imread('ch07\\images\\cells.png', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load failed!') sys.exit() def onChange(pos): # cv2.THRESH_BINARY_INV = 검은 객체 흰색으로 ret, dst = cv2.threshold(src, pos, 255, cv2.THRESH.. 2021. 12. 24.
CH06 Opencv-Python Hough Transform(직선, 원) 허프 변환(Hough transform) 직선 검출이란? • 2차원 영상 좌표에서의 직선의 방정식을 파라미터(parameter) 공간으로 변환하여 직선을 찾는 알고리즘 결국에는 y= a'x+b'에서의 한 점은 b= -xa+y에서의 한점을 지나는데 이 점은 y= a'x+b'에 들어가는 파라미터 값 구체적으로 보자면 축적배열(accumulation array) - 직선 성분과 관련된 원소 값을 1씩 증가시키는 배열 직선의 방정식 y = ax + b 를 사용할 때의 문제점 - y 축과 평행한 수직선을 표현하지 못함 ==> 극좌표계 직선의 방정식을 사용(Hough Transform) why? a = 0 이면 수평선은 만들 수 있지만 수직선은 a가 무한대로 가야하기때문 표현 불가능 cv2.HoughLinesP(i.. 2021. 12. 19.
CH06 Opencv-Python 영상의 특징추출(Gradient) edge검출(detection)과 미분 에지(edge) • 영상에서 픽셀의 밝기 값이 급격하게 변하는 부분 • 일반적으로 배경과 객체, 또는 객체와 객체의 경계 1. Step Function= 보통 사용하지 않음 2. 서서히 바뀌는 형태(일반적으로 pixel를 서서히 바뀜) 3. Noise가 껴있는 상태 4. Gaussian(blur를 통해서 미분을 진행) 미분(derivative) 미분이란? 미세한 부분에서 어떤 변화가 얼마만큼 발생하고있는지 판단하는 기법(= 순간변화률) ==> 변화가 얼마만큼 나타내는 척도 - 그림1. 작아지거나 커지는 부분을 미분 - 값이 급격하게 변하는 부분을 미분(= 해당 부분의 Edge를 검출하기위해서) *영상에서는 pixel 값이 연속함수가 아니기 때문에 그림3 처럼 나오게.. 2021. 12. 19.
CH05 Opencv-Python 기하학적(Geometry) 변환 영상의 기하학적 변환(geometric transformation)이란? • 영상을 구성하는 픽셀의 배치 구조를 변경함으로써 전체 영상의 모양을 바꾸는 작업 • Image registration, removal of geometric distortion, etc 이동 변환(Translation transformation) • 가로 또는 세로 방향으로 영상을 특정 크기만큼 이동시키는 변환 • x축과 y축 방향으로의 이동 변위를 지정 영상의 전단 변환(Shear transformation) - 층 밀림 변환. x축과 y축 방향에 대해 따로 정의 cv2.warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None) -> ds.. 2021. 12. 18.
CH04 Opencv-Python Cartoon_filter def cartoon_filter(frame): # 축소한 이미지에서 blur 진행시 단순화가 더 효과적으로 나타남 (h, w) = frame.shape[:2] frame2 = cv2.resize(frame, (w//2, h//2)) # 영상에선 가로 * 세로 # resize안하고 그대로 진행하면 좀 느림? resize 진행하고 적용 blr = cv2.bilateralFilter(frame2, -1, 10, 5) # 내부에서 grayscale변환함 # cv2.Canny로만 사용하면 edge가 흰색(255)가되고 배경이 검정(0) # so, 255 - cv2.Canny() : 반전 됨 # 가장자리 검출 cv2.Canny() edge = 255 - cv2.Canny(frame2, 60, 150) # cv2... 2021. 12. 18.
CH04 Opencv-Python 필터링(filtering) - Median, bilateral 잡읍제거 영상의 잡음 제거 영상의 잡음? - 영상의 픽셀 값에 추가되는 원치 않는 형태의 신호 잡음(noise)종류 • 가우시안 잡음 (Gaussian noise) • 소금&후추 잡음, 솔트 패퍼 (Salt&Pepper) Median Filter • 주변 픽셀들의 값들을 정렬하여 그 중앙값(median)으로 픽셀 값을 대체 • 소금-후추 잡음 제거에 효과적 • Quailty가 좋지 않아서 잘 안쓰임 # 이미지에 노이즈 추가 함수 def noisy(noisy_type, image): if noisy_type == 'speckle': row,col,ch = image.shape gauss = np.random.randn(row,col,ch) gauss = gauss.reshape(row,col,ch) noisy = .. 2021. 12. 18.
CH04 Opencv-Python 필터링(filtering) - blurring, Sharpening 영상의 필터링(image filtering) 영상에서 필요한 정보만 통과시키고 원치 않는 정보는 걸러내는 작업 1. 주파수 공간에서의 필터링(수학적 이론이 필요함) *저주파 = 부드러운 성분 *고주파 = 픽셀 값이 급격하게 바뀌는 성분 2. 공간의 필터링(Correlation, Deep Learning ==> Conv) *영상의 픽셀 값을 직접 이용하는 필터링 방법 *대상 좌표의 픽셀 값과 주변 픽셀 값을 동시에 사용 = 주로 마스크(mask) 연산을 이용함 (마스크 = 커널(kernel) = 윈도우(window) = 템플릿(template)) 다양한 모양과 크기의 마스크 마스크의 형태와 값에 따라 필터의 역할이 결정됨 • 영상 부드럽게 만들기(Mean filter, GaussianBlur) • 영상 날.. 2021. 12. 18.
CH03 Opencv-Python Chroma_key Chroma_Key 합성 - 녹색 또는 파란색 배경에서 촬영한 영상에 다른 배경 영상을 합성하는 기술 import cv2 import sys import matplotlib.pyplot as plt # 녹색 배경 영상(여성만 추출) cap1 = cv2.VideoCapture('ch03\\video\\woman.mp4') # 예외처리 if not cap1.isOpened(): print('video open failed') sys.exit() # 비오는 배경 영상 cap2 = cv2.VideoCapture('ch03\\video\\raining.mp4') # 두 영상 크기, FPS 같다고 가정 frame_cnt1 = round(cap1.get(cv2.CAP_PROP_FRAME_COUNT)) frame_cn.. 2021. 12. 18.
728x90