목록OpenCV (33)
귀퉁이 서재
이번 포스팅에서는 이미지를 이동, 확대, 축소, 회전하는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/05.geometric_transform 이미지 이동 이미지를 이동하는 방법은 간단합니다. 원래 있던 좌표에 이동시키려는 거리만큼 더하면 됩니다. x_new = x_old + d₁ y_new = y_old + d₂ 위 방정식을 행렬식으로 표현하면 아래와 같습니다. 행렬식을 다시 풀어서 써보겠습니다. x_new = x_old + d₁ = 1*x_old + 0*y_old + d₁ y_new = y_old + d₂ =..
이번 포스팅에서는 여러 가지 실습을 해보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/04.img_processing 이미지 유사도 비교 실습 이전 포스팅에서 히스토그램은 이미지의 픽셀 값의 분포를 나타낸다고 배웠습니다. 픽셀 값의 분포가 서로 비슷하다면 유사한 이미지일 확률이 높고, 분포가 서로 다르다면 서로 다른 이미지일 확률이 높습니다. 이러한 사실을 이용하여 이미지의 유사도를 측정할 수 있습니다. 즉, 두 이미지의 히스토그램을 비교하면 되는 것입니다. OpenCV는 히스토그램을 비교하여 두 이미지가 얼마나 유사한지 판단해주는..
이번 포스팅에서는 2차원 히스토그램과 역투영에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/04.img_processing 2차원 히스토그램 (2D Histogram) 1차원 히스토그램은 이미지 안에 픽셀이 각각 몇 개인지를 표현합니다. 반면, 2차원 히스토그램은 축이 2개이고, 각 축이 만나는 지점의 개수를 표현합니다. 바로 예를 들어보겠습니다. # 2D 히스토그램 (histo_2d.py) import cv2 import matplotlib.pylab as plt plt.style.use('classic') # --①..
이번 포스팅에서는 히스토그램에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/04.img_processing 히스토그램 히스토그램은 도수 분포표를 그래프로 나타낸 것입니다. 쉽게 말해 무엇이 몇 개 있는지 개수를 세어 놓은 것을 그래프로 나타낸 것을 말합니다. 이미지의 픽셀값을 히스토그램으로 표시하는 것은 이미지를 분석하는 데 도움을 줍니다. 예를 들어 전체 이미지에서 픽셀 값이 1인 픽셀이 몇 개이고, 2인 픽셀이 몇 개이고, 255인 픽셀이 몇 개인지까지 세는 것입니다. 이렇게 함으로써 픽셀들의 색상이나 명암의 분포를..
이번 포스팅에서는 이미지 연산에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/04.img_processing 이미지 연산 이미지 연산을 위해서 numpy 연산을 활용하는 방법이 있습니다. 하지만 OpenCV에서도 이미지 연산을 위한 함수를 제공합니다. OpenCV에서 굳이 연산을 위한 함수를 제공하는 이유는 값의 범위 때문입니다. 한 픽셀이 가질 수 있는 값의 범위는 0~255인데, 연산의 결과가 255보다 크거나 0보다 작을 수 있어서 결과 값을 0~255로 제한할 필요가 있습니다. OpenCV에서 제공하는 사칙연산 ..
이번 포스팅에서는 바이너리 이미지를 만드는 대표적인 방법인 스레시홀딩에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/04.img_processing 스레시홀딩(Thresholding) 스레시홀딩은 바이너리 이미지를 만드는 가장 대표적인 방법입니다. 바이너리 이미지(binary image)란 검은색과 흰색만으로 표현한 이미지를 의미합니다. 스레시홀딩이란 여러 값을 어떤 임계점을 기준으로 두 가지 부류로 나누는 방법을 의미합니다. 전역 스레시홀딩 어떤 임계값을 정한 뒤 픽셀 값이 임계값을 넘으면 255, 임계값을 넘지 않으..
이번 포스팅에서는 OpenCV로 색상을 표현하는 방식에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/04.img_processing BGR, BGRA 색상을 표현하는 방법으로는 RGB(Red, Green, Blue) 방식이 있습니다. 빨강, 초록, 파랑 세 가지 색의 빛을 섞어서 원하는 색을 만드는 방식입니다. 각 색상은 0~255 사이의 값으로 표시하고 값이 커질수록 해당 색상의 빛이 밝아지는 원리입니다. RGB = (255, 255, 255) 일 때는 흰색이고, RGB = (0, 0, 0) 일 때는 검은색입니다. 그..
이번 포스팅에서는 이미지 내에서 관심 영역(Region of Interest, ROI)을 표시하는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/04.img_processing 관심 영역(ROI) 표시하기 관심 영역(ROI)이란 말 그대로 영상 내에서 관심이 있는 영역을 뜻합니다. 아래는 일몰 사진입니다. 일몰 사진 내에서 원하는 영역을 표시하는 방법에 대해 살펴보겠습니다. 아래 코드를 실행하면 태양 주위를 초록색 사각형으로 표시한 이미지가 생성됩니다. # 관심영역 표시 (roi.py) import cv2 impo..
이번 포스팅에서는 창을 관리하는 방법과 키보드 및 마우스 이벤트를 처리하는 방법을 알아보겠습니다. 이번 글 역시 파이썬으로 만드는 OpenCV 프로젝트(이세우 저)를 정리한 것입니다. 코드: https://github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/02.interface 창 관리 우선, 창 관리를 하는 5가지 함수에 대해 알아보겠습니다. cv2.namedWindow(winname, flags) 함수는 winname이라는 이름을 갖는 창을 생성해줍니다. 파라미터는 아래와 같습니다. winname: 창 구분자로 활용될 창 이름 flags: 창 옵션 (cv2.WINDOW_NORMAL: 사용자가 창 크기를 조정할 수 있음, cv2.WINDOW_AUTO..
이번 포스팅에서는 이미지에 도형을 그리는 방법에 대해 알아보겠습니다. 이번 포스팅 역시 '파이썬으로 만드는 OpenCV 프로젝트(이세우 저)'를 정리한 것임을 밝힙니다. 코드: https://github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/02.interface 직선 그리기 우선, 아래와 같이 빈 도화지 같은 하얀 이미지를 준비합니다. (blank_500.jpg) 이곳에 다양한 직선을 그려보겠습니다. cv2.line(img, start, end, color, thickness, lineType) 함수를 호출하여 다양한 선을 그릴 수 있습니다. 파라미터는 아래와 같습니다. img: 그림을 그릴 이미지 파일 start: 선 시작 좌표(ex; (0,0))..
OpenCV를 활용한 대부분의 작업은 이미지를 읽어서 적절한 연산을 적용한 뒤 결과를 출력하거나 파일로 저장하는 것입니다. 이번 포스팅에서는 OpenCV의 가장 첫 번째 단계인 이미지 입출력에 대해 알아보겠습니다. 이 포스팅은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저)를 정리한 것임을 우선 밝힙니다. 코드: https://github.com/BaekKyunShin/OpenCV_Project_Python/tree/master/02.interface 이미지 읽기 OpenCV를 사용해서 이미지를 화면에 표시하는 가장 간단한 코드는 아래와 같습니다. 이미지 파일은 이곳에서 다운받으시기 바랍니다. 참고로 몇몇 사진(바로 아래 예제 포함)은 제가 직접 찍어서 다운받은 폴더에 없을 겁니다. 가끔 이미지 파일..
이번 포스팅에서는 컴퓨터 비전의 대표적인 라이브러리인 OpenCV에 대해서 배워보겠습니다. 그전에 영상 처리와 컴퓨터 비전에 대해 간단히 알아보겠습니다. 영상 처리와 컴퓨터 비전 영상 처리(image processing)는 영상에 여러 연산을 가해서 원하는 결과를 새롭게 얻어내는 과정입니다. 대부분의 영상 처리의 목적은 더 좋은 품질의 영상을 얻는 것입니다. 영상 처리의 사례로는 화질 개선, 영상 복원, 영상 분할 등이 있습니다. 컴퓨터 비전은 영상 처리를 포함하는 포괄적인 개념입니다. 영상 처리가 원본 영상을 사용자가 원하는 새로운 영상으로 바꿔주는 기술이라면, 컴퓨터 비전은 영상에서 의미 있는 정보를 추출해 주는 기술입니다. 예를 들면, 객체 검출(Object Detection), 객체 추적(Obje..
지금까지 데이터 분석 - 머신러닝 - 딥러닝 - 자연어 처리를 공부했습니다. 이것들에 이어 앞으로는 컴퓨터 비전 공부를 하려고 합니다. 사실 자연어 처리도 얕게 공부한 수준이긴 합니다. 이런 상황에서 새롭게 컴퓨터 비전을 공부하는 이유는 캐글에 컴퓨터 비전 관련 대회가 상당히 많기 때문입니다. 자연어 처리 대회가 많다면 그것에 집중하겠는데 아무래도 비전 대회가 많아 이 분야도 공부를 하고 싶었습니다. 공부를 위해 선정한 책은 파이썬으로 만드는 OpenCV 프로젝트(이세우 저)입니다. 주변에서 추천받은 책이기도 하고, 쉽게 쓰였다는 후기가 많아서 이 책으로 선정했습니다. 이 책을 완독하고 내용을 완전히 습득하는데 얼마나 걸릴지는 모르겠습니다. 중간에 캐글 대회와 병행한다면 몇 달이 걸릴 수도 있을 겁니다...