본문 바로가기

전체 글116

[OpenCV] 11. 뒤틀기 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 이동, 확대/축소, 회전은 변환 후에도 기존의 모양이 유지되지만, 뒤틀기(warping, 워핑)은 기존의 모양과 달라진다. 11.1 어핀 변환 어핀 변환(affine transform)은 이동, 확대/축소, 회전을 포함하는 변환으로 직선, 길이의 비율, 평행성을 보존하는 변환을 말한다. 변환 전과 후의 3개의 점을 짝 지어 매핑할 수 있다면 변환행렬을 거꾸로 계산할 수 있다. OpenCV는 아래 함수로 이 기능을 제공한다. matrix = cv2.getAffineTransform(pts1, pts2) pts1 :.. 2023. 3. 6.
[OpenCV] 10. 이동, 확대/축소, 회전 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 영상의 기하학적 변환은 기존의 영상을 원하는 모양이나 방향 등으로 변환하기 위해 각 픽셀을 새로운 위치로 옮기는 것이 작업의 대부분이다. 각 픽셀의 $x, y$ 좌표에 대해 옮기고자 하는 새로운 좌표 $x', y'$을 구하는 연산이 필요하다. 각 좌표에 대해 연산식을 적용해서 새로운 좌표를 구해야 하는데, 이때 사용할 연신삭을 가장 효과적으로 표현하는 방법이 행렬식이다. 변환행렬을 이용해서 영상 변환에 가장 흔하게 사용하는 이동, 확대/축소, 회전에 대해 알아보자. 10.1 이동 2차원 공간에서 물체를 다른 곳으.. 2023. 3. 3.
[OpenCV] 9. 히스토그램 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 히스토그램(histogram)은 무엇이 몇 개 있는지 그 수를 세어 놓은 것을 그림으로 표시한 것을 말한다. 히스토그램은 영상을 분석하는 데 도움이 많이 된다. 9.1 히스토그램 계산과 표시 영상 분야에서의 히스토그램은 전체 영상에서 픽셀 값이 1인 픽셀이 몇 개이고 2인 픽셀이 몇 개이고 하는 식으로 픽셀 값이 255인 픽셀이 몇 개인지까지 세는 것을 말한다. 전체 영상에서 픽셀들의 색상이나 명암의 분포를 파악할 수 있다. OpenCV에서는 히스토그램을 계산하는 cv2.calcHist() 함수를 제공한다. cv.. 2023. 3. 2.
[OpenCV] 8. 이미지 연산 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 이미지와 영상에서 연산하는 방법을 알아보자. 연산 결과는 새로운 영상을 만들어 내므로 그 자체가 목적이 될 수도 있고, 정보를 얻기 위한 과정일 수도 있다. 8.1 영상과 영상의 연산 영상에 연산을 할 수 있는 방법은 Numpy의 브로드캐스팅 연산을 직접 적용하는 방법과 OpenCV에서 제공하는 함수를 사용하는 방법이 있다. 영상에서 한 픽셀이 가질 수 있는 값의 범위는 0~255인데, OpenCV의 함수를 사용하면 그 범위를 초과한 결과에 대해서도 안전하게 처리가 가능하다. dest = cv2.add(src1,.. 2023. 2. 27.
[OpenCV] 7. 스레시홀딩 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 이미지를 검은색과 흰색만으로 표현한 것을 바이너리 이미지라고 한다. 이미지에서 원하는 피사체의 모양을 좀 더 정확히 판단하기 위해서 사용한다. (예 : 종이에서 글씨만을 분리, 배경과 전경을 분리) 스레시홀딩(Thresholding) : 값을 경계점을 기준으로 두 가지 부류로 나누는 것, 바이너리 이미지를 만드는 가장 대표적인 방법 7.1 전역 스레시 홀딩 바이너리 이미지를 만들기 위해서 컬러 이미지를 그레이 스케일로 바꾸고 각 픽셀의 값이 경계값을 넘으면 255, 넘지 못하면 0을 지정한다. 간단한 Numpy .. 2023. 2. 22.
[OpenCV] 6. 컬러 스페이스 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 영상에 색상과 명암을 표현하는 방법들, 각각의 차이 그리고 활용 방법에 대한 공부 6.1 디지털 영상의 종류 디지털화된 이미지는 픽셀(pixel)이라는 단위가 여러 개 모여서 그림을 표현한다. 하나의 픽셀을 어떻게 구성하느냐에 따라 이미지를 구분 바이너리(binary, 이진) 이미지 한 개의 픽셀을 두 가지 값으로만 표현한 이미지 두 가지 값은 0과 1 또는 0과 255를 사용한다. 보통 0은 검은색 1이나 255는 흰색을 의미 값으로는 명암을 표현할 수 없고, 점의 밀도로 명암을 표현 영상 작업에서 피사체의 색.. 2023. 2. 22.
[OpenCV] 5. 관심영역(ROI) 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 이미지에 어떤 연산을 적용해서 새로운 이미지나 정보를 얻어내려고 할 때, 전체 이미지를 대상으로 연산을 하는 것보다 관심이 있는 부분만 잘라내서 하는 것이 훨씬 효과적이다. 관심있는 영역만 잘라내서 연산을 하면, 연산할 데이터의 양을 줄이고 수행 시간을 단축시키는 이점 데이터의 양이 줄어 들면 그 형태도 단순해지므로 적용해야 하는 알고리즘도 단순해지는 이점 이미지 연산은 항상 좌표를 기반으로 해야 하는데, 그 영역이 클 때보다 작을 때 좌표 구하기가 쉽다는 이점 5.1 관심영역 지정 전체 이미지에서 연산과 분석의.. 2023. 2. 21.
[OpenCV] 4. 이벤트 처리 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. OpenCV에는 키보드와 마우스의 입력을 이용할 수 있는 함수를 제공한다. 4.1 키보드 이벤트 cv2.waitKey(delay) : 키보드 입력 알아내는 함수 delay 인자에 밀리초 단위로 숫자를 전달 해당 시간동안 프로그램을 멈추고 대기하다가 키보드의 눌린 키에 대응하는 코드 값을 정수로 반환한다. 지정한 시간까지 키보드 입력이 없으면 -1을 반환 delay 인자에 0을 전달하면 대기 시간을 무한대로 하겠다는 의미, 키를 누를 때까지 프로그램은 멈춘다. key = cv2.waitKey(0) print(key.. 2023. 2. 15.
[OpenCV] 3. 창 관리 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. OpenCV가 제공하는 창 관리 API들, 창을 열 때 사용한 이름을 기반으로 연결되는 것이 특징이다. cv2.namedWindow(title [, option]) : 이름을 갖는 창 열기 title : 창 이름, 제목 줄에 표시 option : 창 옵션, ‘cv2.WINDOW_’로 시작 cv2.WINDOW_NORMAL : 임의의 크기, 사용자 창 크기 조정 기능 cv2.WINDOW_AUTOSIZE : 이미지와 같은 크기, 창 크기 재조정 불가능 cv2.moveWindow(title, x, y) : 창 위치 이동.. 2023. 2. 14.
[DL] Keras fit vs fit_generator 아래 내용들은 제가 혼자 학습하면서 정리한 내용들입니다. '부족한 내용' 혹은 '잘못된 내용'이 있을 수 있습니다. 댓글 남겨주시면 더욱 공부하고 수정하도록 하겠습니다. 감사합니다. Keras를 이용해서 딥러닝 모델을 학습시킬 때 fit() 과 fit_generator() 두 가지 메소드를 사용하여 학습시킬 수 있다. 두 메소드의 차이가 무엇인지, 어떤 것을 사용해야 하는지 궁금해서 비교해보았다. fit fit()은 Scikit-learn의 fit 메소드와 유사하다. 입력으로 준 전체 데이터를 fit 메소드로 통과 시킨다. 그러므로 전체 데이터를 통과 시킬 수 있는 작은 크기의 dataset을 학습 시킬 때 사용한다. fit_generator fit_generator()는 x, y 데이터를 직접 통과시키.. 2023. 2. 14.
[DL] Tensoflow.Keras ImageDataGenerator 아래 내용들은 제가 혼자 학습하면서 정리한 내용들입니다. '부족한 내용' 혹은 '잘못된 내용'이 있을 수 있습니다. 댓글 남겨주시면 더욱 공부하고 수정하도록 하겠습니다. 감사합니다. ImageDataGenerator 사용하기 ImageDataGenerator() 함수는 주어진 데이터를 이용해 변형된 이미지를 만들어 학습셋에 포함 시키는 기능을 제공한다. 이미지 데이터의 수를 확장할 때 효과적으로 사용 가능하다. from keras.preprocessing.image import ImageDataGenerator train_datagen = ImageDataGenerator(rescale = 1.// 255, horizontal_flip = True, vertical_flip = True, width_sh.. 2023. 2. 14.
[OpenCV] 2. 그림, 글씨 그리기 아래 내용은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저) 를 공부하며 정리한 내용들입니다. 모든 소스 코드를 확인하고 싶으시다면 제일 하단의 저자 GitHub 주소를 참고하시기 바랍니다. 그림 그리기는 객체나 얼굴을 인식해서 그 영역에 사각형을 그려서 표시 하거나 이름을 글씨로 표시 하는 등의 용도로 자주 활용 2.1 직선 그리기 cv2.line() : 직선을 그리는 함수 cv2.line(img, start, end, color [, thickness, lineType]): 직선 그리기 img : 그림 그릴 대상 이밎, Numpy 배열 start : 선 시작 지점 좌표(x, y) end : 선 끝 지점 좌표(x, ) color : 선 색상, (Blue, Green, Red), 0~255 thick.. 2023. 2. 14.