반응형

2020/09 100

[파이썬 OpenCV] 트랙바를 이용한 특정 색상 영역 추출 - cv2.inRange, cv2.createTrackbar

황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다. 황선규 박사님의 'OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝'를 바탕으로 제작하였습니다. 트랙바를 이용한 특정 색상 영역 추출 HSV 색 공간의 H의 범위를 트랙바로 조정하여 원하는 색 검출을 용이하게 할 수 있습니다. 트랙바 만드는 법과 트랙바 생성 함수는 여기에서 확인할 수 있습니다. 색상 영역 검출 하는 방법은 여기에서 확인할 수 있습니다. [예제 코드] src = cv2.imread('candies.png') if src is None: print('Image load failed!') sys.exit() src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV) # BGR -> HSV 로 변경(색상 검..

[파이썬 OpenCV] 특정 색상 영역 추출 - cv2.inRange

황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다. 황선규 박사님의 'OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝'를 바탕으로 제작하였습니다. 특정 색상 영역 추출 특정 색상 영역 추출할 때 HSV 색 공간을 이용하는게 좋습니다. RGB는 어두운 사진에서 색상 영역 추출하면 잘 되지 않습니다. HSV는 H,S로 색상을 조절하고 V는 밝기를 조절하므로 H와 S 범위만 지정해 준다면 어두운 영상에서도 색상 영역 추출을 할 수 있습니다. 따라서 BGR 영상을 HSV로 전환하고 색상 영역 추출을 해야 합니다. 1. 특정 범위 안에 있는 행렬 원소 검출 - cv2.inRange() OpenCV에서 제공하는 cv2.inRange 함수를 사용하여 특정 생삭 영역을 추출할 수 있습니다. [함수 설명] ..

[파이썬 OpenCV] 히스토그램 평활화 - cv2.equlizeHist

황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다. 황선규 박사님의 'OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝'를 바탕으로 제작하였습니다. 히스토그램 평활화(Histogram equalization) 히스토그램 평활화는 히스토그램이 그레이스케일 전체 구간에서 균일한 분포로 나타나도록 변경하는 명암비 향상 기법입니다. cdf를 이용하여 평활화를 합니다. 1. 그레이스케일 영상 히스토그램 평활화하기 - cv2.equlizeHist OpenCV에서 제공하는 cv2.equlizeHist 함수로 히스토그램 평활화를 할 수 있습니다. [함수 설명] cv2.equalizeHist(src, dst=None) -> dst • src: 입력 영상. 그레이스케일 영상. • dst: 결과 영상. [그레이스..

[파이썬 OpenCV] 영상의 명암비 조절 - 히스토그램 스트레칭, 정규화(cv2.normalize)

황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다. 영상의 명암비 조절 명암비(Contrast)는 밝은 곳과 어두운 곳 사이에 드러나는 밝기 정도의 차이를 의미합니다. 1. 기본적인 명암비 조절 - np.clip 그레이스케일의 픽셀값을 조정하여 명암비를 조절하는 법을 알아보겠습니다. np.clip으로 saturate 연산을 구현하였고 아래의 방정식을 구현하였습니다. [예제 코드] src = cv2.Imread('lenna.bmp', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load failed!') sys.exit() alpha = 1 # 기울기 dst = np.clip((1 + alpha) * src - 128 * alpha), 0, 255)..

[파이썬 OpenCV] OpenCV 함수만으로 히스토그램 그리기 - cv2.line 활용

황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다. OpenCV 함수만으로 히스토그램 그리기 - cv2.line 활용 이전 포스팅에서는 plt함수를 이용해서 히스토그램을 그렸습니다. 이번 포스팅에서는 OpenCV 함수만으로 히스토그램 그리는 법을 알아보겠습니다. ## OpenCV 함수만으로 히스토그램 그리기 def getGrayHistImage(hist): # 가장 높은 높이가 100으로 제한을 둠 imgHist = np.full((100, 256), 255, dtype=np.uint8) histMax = np.max(hist) # histmax = 255 for x in range(256): pt1 = (x, 100) # 시작점, 좌측 상단 기준 pt2 = (x, 100 - int(hist[..

[파이썬 OpenCV] 영상의 히스토그램 분석하기 - cv2.calcHist

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

[파이썬 OpenCV] 컬러 영상과 색 공간 - 색상 분리(cv2.split), 색상 결합(cv2.merge), 색 변환(cv2.cvtColor)

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

[파이썬 OpenCV] 영상의 산술 연산 - cv2.add, cv2.addWeighted, cv2.subtract, cv2.absdiff

황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다. 영상의 산술 연산 OpenCV에서 제공하는 산술 연산 함수에 대해서 알아보겠습니다. 1. 덧셈 연산 - cv2.add 두 영상의 같은 위치에 존재하는 픽셀 값을 더하여 결과 영상의 픽셀 값으로 설정합니다. 덧셈 결과가 255보다 크면 픽셀 값을 255로 설정하는 saturate 기능이 적용되어 있습니다. [함수 설명] cv2.add(src1, src2, dst=None, mask=None, dtype=None) -> dst • src1: (입력) 첫 번째 영상 또는 스칼라 • src2: (입력) 두 번째 영상 또는 스칼라 • dst: (출력) 덧셈 연산의 결과 영상 • mask: 마스크 영상 • dtype: 출력 영상(dst)의 타입. (e...

[파이썬 OpenCV] 영상의 밝기 조절 - cv2.add, np.clip

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

[파이썬 OpenCV] 동영상 전환 이펙트, 디졸브(dissolve)효과

황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다. 동영상 전환 이펙트 두 동영상 클립 사이에 추가되는 애니메이션 효과를 적용시켜보겠습니다. 구현할 기능은 두 개의 동영상 동시 열기, 첫 번째 동영상의 마지막 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는 같다고..

반응형