본문 바로가기
728x90

OpenCV41

CH02 OpenCV-Python 기초(imread, mask,ROI) OpenCV는 영상 데이터를 numpy.ndarray로 표현 img1 = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE) img2 = cv2.imread('cat.bmp', cv2.IMREAD_COLOR) img1, img2 = np.ndarray ndim: 차원 수. len(img.shape)과 같음. shape: 각 차원의 크기. (h, w)= gray 또는 (h, w, 3) = color size: 전체 원소 개수 dtype: 원소의 데이터 타입. 영상 데이터는 uint8. 그레이스케일 영상: cv2.CV_8UC1 → numpy.uint8, shape = (h, w) 컬러 영상: cv2.CV_8UC3 → numpy.uint8, shape = (h, w, 3) 영상생성 .. 2021. 12. 18.
CH01 OpenCV-Python(Image? OpenCV?) 영상(image)이란? • 픽셀(pixel)이 바둑판 모양의 격자에 나열되어 있는 형태 (2차원 행렬) • 픽셀: 영상의 기본 단위, picture element, 화소(畵素) 그레이스케일(grayscale) 영상( 1byte ) • 흑백 사진처럼 색상 정보가 없이 오직 밝기 정보만으로 구성된 영상 • 밝기 정보를 256 단계로 표현 • Pixel 프로그래밍 값(표현방법) = np.uint8 - 총 256개의 구간으로 밝기를 나누고 해당 밝기에 매칭 되는 구간의 정보를 데이터로 저장하는것을 "양자화" 라고 부른다. Y = 0.299R + 0.587G + 0.114B RGB 영상을 GrayScale로 변환?? 장점: 저장용량 ↓, 처리속도↑ 단점: 색상정보 상실 so, Color 정보가 중요할 때는 진행 .. 2021. 12. 18.
CH01 OpenCV-Python(Computer Vision) 황선규 박사님의 패스트 캠퍼스 OpenCV 강의 공부한 내용을 정리해 보았습니다. OpenCV OpenCV는 Open Source Computer Vision Library OpenCV를 활용하여 물체인식, 얼굴인식, 제스처 인식을 비롯하여 자율 주행 자동차, OCR 판독기, 불량검사기 등에 활용 OpenCV는 영상 처리가 들어가는 프로그램이라면 가히 필수적으로 사용하게 되는 라이브러리 *프로젝트 주의사항 제작할 프로그램 설계를 효율적으로 진행하고 완성하기 위한 작업의 첫 걸음은 프로그램이 어떤 목적을 가지고 어떤 역할을 할지 정확하게 파악하는 것 =이것은 카메라의 성능의 선택과 알고리즘의 구성 선택에 필연적인 영향을 미친다. so, 프로그램의 목적을 정확히 파악하고 영상 처리에 필요한 적합한 하드웨어와.. 2021. 12. 18.
이미지 연산, 배열 정합(addWeighted) 이미지 연산 * cv2.add() import cv2 as cv import sys img1 = cv.imread('code007\\color_image.jpg') img2 = cv.imread('tetris_blocks.png') img_hsv = cv.cvtColor(img1, cv.COLOR_BGR2HSV) # add를 위한 동일한 이미지 사이즈로 변경 print(img1.shape) # 640, 1920 ( h ,w ) img2 = cv.resize(img2, (1920,640)) if img1 is None and img2 is None: print('Image load failed') sys.exit() # cv2.add(src1, src2) img_sum = cv.add(img1, img2).. 2021. 12. 12.
모폴로지 연산(Morphology) 모폴로지 변환의 팽창(dilation)과 침식(erosion)을 기본 연산으로 사용해 고급 형태학을 적용하는 변환 연산 입력 이미지가 이진화된 이미지라면 팽창과 침식 연산으로도 우수한 결과를 얻을 수 있다. 하지만, 그레이스케일이나 다중 채널 이미지를 사용하는 경우 더 복잡한 연산을 필요 ▪ 모폴로지(Morphology) 연산이란? • 영상을 형태학적인 측면에서 다루는 기법 • 다양한 영상 처리 시스템에서 전처리(pre-processing) 또는 후처리(post-processing) 형태로 널리 사용 • 수학적 모폴로지(mathematical morphology) ▪ 구조 요소(Structuring element) • 모폴로지 연산의 결과를 결정하는 커널, 마스크, 윈도우 # 만약 세로방향으로만 침식 o.. 2021. 12. 12.
opencv-VideoCapture, VideoWriter 프레임은 비디오나 영화, TV등이 영상 매체를 전달할 때 화면에 뿌려주는 한장 한장의 그림을 말합니다. 이러한 한장 한장의 그림들이 초당 얼마간의 속도로 빠르게 바뀌면서 움직이는 하나의 동영상을 만들어 내게 됩니다. 영화에서 쓰이는 필름을 떠 올려보십시요. 그 필름에서 보이는 하나 하나의 그림이 바로 프레임을 뜻합니다. 이것은 인간의 시각이 한 장의 그림을 본 후 뇌에 전달하기 까지의 과정에서 또 다른 한 장의 그림을 보여줌으로써 실제로는 한 장,한 장 의 그림을 본 것임에도 움직인다고 느끼게 만드는 일종의 눈 속임이라고 볼 수 있습니다. # camera cap = cv.VideoCapture(0) # in 예외처리 if not cap.isOpened(): print('Camera open failed'.. 2021. 12. 11.
opencv-HSV, YCrCb(특정 색 추출) * HSV - 특정 색 추출 - RGB는 영상을 어떤것을 가져왔느냐에 따라 성능이 다름(밝기) - HSV에선 Value로 명암을 조절할 수 있기 때문에 더 유용함 ''' # HSV ( Hue, Saturation, Value ) 색상, 채도, 명도 H(0~180), S(0~255), V(0~255) inRange = 낮은 범위(lowerb)에서 높은 범위(upperb) 사이의 요소를 추출 ''' img = cv.imread('code007\\color_image.jpg') img_hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) # HSV (h, s, v) = cv.split(img_hsv) # cv.split # HSV = 특정 색만 검출 할 수 있다 # hsv 이미지 참조(0~.. 2021. 12. 11.
opencv-findContours # Counting Objects(contours 윤곽선, hierarchy 계층구조) # cv2.findContours(이진화 이미지(mask), 검색 방법, 근사화 방법) contours, hierarchy = cv.findContours(dst.copy(), cv.RETR_EXTERNAL, \ cv.CHAIN_APPROX_SIMPLE) # [contours[i]] = 윤곽선 표시 # cv.CHAIN_APPROX_SIMPLE 윤곽점들 단순화 수평, 수직 및 대각선 요소를 압축하고 끝점만 남김 print(contours) # 각 점으로 표시됨 print(hierarchy[0][1]) # cv2.drawContours(이미지, [윤곽선], 윤곽선 인덱스, (B, G, R), 두께, 선형 타입) # 윤곽선.. 2021. 12. 11.