본문 바로가기
728x90

OpenCV41

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.
CH03 Opencv-Python Histogram backprojection 히스토그램 역투영(Histogram backprojection) * 영상의 각 픽셀이 주어진 히스토그램 모델에 얼마나 일치하는지를 검사하는 방법 * 임의의 색상 영역을 검출할 때 효과적 * 확률론적 의미를 가지고 있음(역투영 이미지) cv2.calcBackProject(images, channels, hist, ranges, scale, dst=None) -> dst import cv2 import sys import matplotlib.pyplot as plt src = cv2.imread('ch03\\images\\cropland.png') if src is None: print('Image load failed') sys.exit() # ROI 창 생성(드래그 할 수 있음) / spacebar 누르.. 2021. 12. 18.
CH03 Opencv-Python Histogram, Contrast Histogram - 영상의 픽셀 값 분포(= 픽셀의 개수 Counting) 예를 들어 그레이스케일 영상에서 각 그레이스케일 값에 해당하는 픽셀의 개수를 구하고, 이를 막대 그래프의 형태로 표현 Histogram normalized(영상의 자동 명암비 조절) Histogram Stretching 영상의 히스토그램이 그레이스케일 전 구간에서 걸쳐 나타나도록 변경하는 선형 변환 기법 - 단순히 픽셀 개수를 GrayScale 값이 몇개 있다 counting하게 되면 이 영상이 작은 영상일 때와 큰 영상일때의 값을 비교하기가 애매(size를 normalized 할때도 있음) 각 픽셀의 개수를 영상 전체 픽셀 개수로 나누어준 것 해당 그레이스케일 값을 갖는 픽셀이 나타날 확률 영상과 히스토그램의 관계 cv2.ca.. 2021. 12. 18.
CH03 Opencv-Python 영상 처리 기법(화소, 연산) 영상의 화소 처리 기법 화소 처리(Point processing) 입력 영상의 특정 좌표 픽셀 값을 변경하여 출력 영상의 해당 좌표 픽셀 값으로 설정하는 연산 f1 : 항등함수(반전) f2 : 영상의 밝기 조절(픽셀값 조절) f3 : 0 or 255 이진영상으로 변환 영상의 밝기 조절 cv2.add(src1, src2, dst=None, mask=None, dtype=None) -> dst ''' src1: (입력) 첫 번째 영상 또는 스칼라 src2: (입력) 두 번째 영상 또는 스칼라 dst: (출력) 덧셈 연산의 결과 영상 mask: 마스크 영상, 픽셀값이 0이 아닌 부분에 대해서만 덧셈 연산이 된다 dtype: 출력 영상(dst)의 타입. (e.g.) cv2.CV_8U, cv2.CV_32F 등 '.. 2021. 12. 18.
CH02 OpenCV-Python 기초(도형그리기) import numpy as np import cv2 img = np.full((400, 400, 3), 255, np.uint8) cv2.line(img, (50, 50), (200, 50), (0, 0, 255), 5) cv2.line(img, (50, 60), (150, 160), (0, 0, 128)) ## ( x, y, w, h) = x, y 꼭지점으로부터 (x+w), (y+h) cv2.rectangle(img, (50, 200, 150, 100), (0, 255, 0), 2) cv2.rectangle(img, (70, 220), (180, 280), (0, 128, 0), -1) cv2.circle(img, (300, 100), 30, (255, 255, 0), -1, cv2.LINE_AA) .. 2021. 12. 18.
728x90