Language - Python(Opencv) 48

Python Opencv - #16, 영상 필터링 작업

▶ 영상에 필터링 적용하기 영상의 필터링(image filtering)은 영상에서 필요한 정보만 통과시키고 원치 않는 정보는 걸러내느 작업이빈다. → 필터링 종류 필터링 작동 방법은 크게 두 가지로 나눌 수 있습니다. (1) 주파수 공간에서의 필터링 (Frequency domain filtering) 주파수 값을 이용하는 필터링 방법입니다. 영상에서 주파수 값을 추출하는 FFT를 거쳐서 추출한 값과 설정한 관심영역을 곱하는 IFFT를 통해 주파수 필터링이 작용합니다. (2) 공간적 필터링(Spatial domain filtering) 영상의 픽셀 값을 직접 이용하는 필터링 방법입니다. 대상 좌표의 픽셀 값과 주변 픽셀 값을 동시에 사용합니다. 주로 마스크연산을 이용합니다. (마스크 = 커널(kernel)..

Python Opencv - #15, 특정 색상 추출 (trackbar 응용)

▶ 트랙바를 이용한 특정 색상 영역 추출 HSV 색 공간의 H의 범위를 트랙바로 조정하여 원하는 색 검출을 용이하게 할 수 있습니다. 트랙바 만드는 법과 트랙바 생성 함수는 여기에서 확인할 수 있습니다. 색상 영역 검출 하는 방법은 여기에서 확인할 수 있습니다. [예제 코드] src = cv2.imread('candies.png') if src is None: print('Image load failed!') sys.exit() # BGR -> HSV 로 변경 (정확성, 효율성면에서 BGR 방식보단 HSV가 효과적임) src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV) # 트랙바 콜백 함수 생성 def on_trackbar(pos): hmin = cv2.getTrackba..

Python Opencv - #14, histogram 기본

▶ 영상의 히스토그램 분석하기 -. 히스토그램(Histogram)은 영상의 픽셀 값 분포를 그래프의 형태로 표현한 것입니다. 예를 들어, 그레이스케일 영상에서 각 그레이스케일 값에 해당하는 픽셀의 개수를 구하고, 이를 막대 그래프 형태로 표현합니다. -. 정규화된 히스토그램(Normalized histogram)은 각 픽셀의 개수를 영상 전체 픽셀 개수로 나누어 준 것입니다. 해당 그레이스케일 값을 갖는 픽셀이 나타날 확률을 의미합니다. → 영상과 히스토그램의 관계 밝은 영상이면 히스토그램이 전체적으로 오른쪽으로 치우쳐져 있습니다. 어두운 영상이면 히스토그램이 왼쪽으로 치우쳐져 있습니다. 명암비가 확실한 영상이면 히스토그램이 전체적으로 분포해 있습니다. 영상의 히스토그램을 보고 영상의 특징을 알 수 있습..

Python Opencv - #13, 영상 색상 처리

▶ 컬러 영상과 색 공간 컬러 영상은 3차원 np.ndarray로 표현합니다. img.shape = (h, w, 3)입니다. OpenCV에서는 RGB 순서가 아니라 BGR 순서를 기본으로 사용합니다. RGB 색 공간은 빛의 삼원색인 빨간색(R), 녹색(G), 파란색(B)를 혼합하여 색상을 표현합니다. (가산 혼합) → (색상) 채널 분리 - cv2.split cv2.split 함수를 이용해서 RGB 색상 평면을 나눌 수 있습니다. [함수 설명] cv2.split(m, mv=None) -> dst • m: 다채널 영상 (e.g.) (B, G, R)로 구성된 컬러 영상 • mv: 출력 영상 • dst: 출력 영상의 리스트 [예시 코드] # 컬러 영상 불러오기 src = cv2.imread('candies.p..

Python Opencv - #12, 영상 산술 연산

▶ 영상의 산술 연산 OpenCV에서 제공하는 산술 연산 함수에 대해서 알아보겠습니다. → 덧셈 연산 - cv2.add 두 영상의 같은 위치에 존재하는 픽셀 값을 더하여 결과 영상의 픽셀 값으로 설정합니다. 덧셈 결과가 255보다 크면 픽셀 값을 255로 설정하는 saturate 기능이 적용되어 있습니다. (saturate 이전 포스팅에서 설명 했듯이 Limit 값 역할임) [함수 설명] cv2.add(src1, src2, dst=None, mask=None, dtype=None) -> dst • src1: (입력) 첫 번째 영상 또는 스칼라 • src2: (입력) 두 번째 영상 또는 스칼라 • dst: (출력) 덧셈 연산의 결과 영상 • mask: 마스크 영상 • dtype: 출력 영상(dst)의 타입..

Python Opencv - #11, 영상 처리 기법

▶영상의 화소 처리 기법 → 화소 처리(Point processing) • 입력 영상의 특정 좌표 픽셀 값을 변경하여 출력 영상의 해당 좌표 픽셀 값으로 설정하는 연산입니다. • 결과 영상의 픽셀 값이 정해진 범위(ex. 그레이스케일)에 있어야 합니다. • 반전, 밝기 조절, 명암비 조절 등을 할 수 있습니다. ▶ 영상의 밝기 조절 → 밝기 조절이란? • 영상을 전체적으로 더욱 밝거나 어둡게 만드는 연산입니다. → 밝기 조절 수식 출력값이 0보다 작을 때는 0으로 반환하고, 255보다 클 때는 255로 출력하는 작업이 필요합니다. 이를 saturate연산이라고 합니다. (saturate는 Limit, Clip 이라고도 함) → 영상의 밝기 조절을 위한 영상의 덧셈 연산 - cv2.add OpenCV에서는..

Python Opencv - #10, 동영상 응용

▶ 동영상 전환 이펙트 두 동영상 클립 사이에 추가되는 애니메이션 효과를 적용시켜보겠습니다. 구현할 기능은 두 개의 동영상 동시 열기, 첫 번째 동영상의 마지막 N개 프레임과 두 번째 동영상의 처음 N개 프레임을 합성하겠습니다. 또한 합성된 영상을 동영상으로 저장하겠습니다. # 두 개의 동영상을 열어서 cap1, cap2로 지정 cap1 = cv2.VideoCapture('video1.mp4') cap2 = cv2.VideoCapture('video2.mp4') if not cap1.isOpened() or not cap2.isOpened() print('video open failed!') sys.exit # 두 동영상의 크기, FPS는 같다고 가정하겠습니다. # 크기 : 1280 X 720, FPS ..

Python Opencv - #9, Trackbar

▶ 트랙바 사용하기 - cv2.createTrackbar 트랙바에 대해 알아보고 트랙바를 이용하여 그레이스케일 레벨을 표현하도록 해보겠습니다. 트랙바(Trackbar)는 프로그램 동작 중 사용자가 지정한 범위 안의 값을 선택할 수 있는 컨트롤 입니다. OpenCV에서 제공하는 그래픽 사용자 인터페이스 입니다. 윈도우 창에 트랙바를 생성하여 영상의 속성값을 바꿔줄 수 있습니다. → 트랙바 생성 함수 - cv2.createTrackbar cv2.createTrackbar()는 트랙바를 생성해주는 함수입니다. 트랙바 이벤트 콜백 함수를 불러옵니다. [함수 설명] cv2.createTrackbar(trackbarName, windowName, value, count, onChange) -> None • trac..

Python Opencv - #8, 키보드 & 마우스 이벤트 처리

▶ 키보드 이벤트 처리하기 이번 포스팅에서는 키보드 이벤트 처리하기를 알아보고 응용으로 'I' 키를 누르면 영상이 반전되는 것을 해보겠습니다. → 키보드 입력 대기 함수 cv2.waitkey 함수로 키보드 이벤트를 처리할 수 있습니다. [명령어 설명] cv2.waitKey(delay=None) -> retval • delay: 밀리초 단위 대기 시간. delay  0 이면 무한히 기다림. 기본값은 0 • retval: 눌린 키 값(ASCII code). 키가 눌리지 않으면 -1. [참고 사항] ▪ cv2.waitKey() 함수는 OpenCV 창이 하나라도 있을 때 동작합니다. ▪ 특정 키 입력을 확인하려면 ord() 함수를 이용합니다. ▪ 주요 특수키 코드: 27(ESC), 13(ENTER), 9(TA..

Python Opnecv - #7 카메라, 동영상 처리

▶ 카메라와 동영상 처리 Python OpenCV에서 카메라와 동영상으로부터 프레임(frame)을 받아오는 함수는 cv2.VideoCapture 클래스 하나로 처리합니다. open()으로 카메라나 동영상을 열고 read()로 프레임을 가져옵니다. → Camera Opencv 함수 - cv2.VideoCapture cv2.VideoCapture() 명령어로 카메라를 열 수 있습니다. cv2.VideoCapture(index, apiPreference=None) -> retval index : camera_id + domain_offset_id 시스템 기본 카메라를 기본 방법으로 열려면 index에 0을 전달합니다. 장치관리자에 등록되어 있는 카메라 순서대로 인덱스가 설정되어 있습니다. apiPreferen..