본문 바로가기

프로그래밍 강좌/C++ - OpenCV

(8)
[OpenCV][C++] 기하학적 변환 (Geometric Transform) 총정리 - warpAffine, warpPerspective transformation 지난 번에 영상 회전에 관해 알아보면서 warpAffine() 함수 사용법에 대해 간단히 알아 보았습니다. https://blog.naver.com/dorergiverny/223103254105 [OpenCV][C++] 영상 회전(image rotation)하는 방법 - getRotationMatrix2D(), warpAffine() 이번에는 영상을 특정 각도로 회전시키는 방법에 대해 알아보겠습니다. 2D 회전 행렬은 아래와 같습니다. ... blog.naver.com 이번에는 좀 더 상세히 알아보도록 하겠습니다. 기하학적 변환(Geometric Transformation)이란? 기하학적 변환은 영상을 사용자가 원하는대로 확대, 축소, 위치 변경, 회전, 왜곡 등을 하는 이미지 변환하는 것을 의미합니다...
[OpenCV][C++] 영상 분할 ( image segmentation ) 총정리(3) - GrabCut graphcut setmousecallback 그랩컷 지난번에는 워터쉐드 (watershed) 알고리즘에 대해 알아봤습니다. https://blog.naver.com/dorergiverny/223099559423 [OpenCV][C++] 영상 분할 image segmentation 총정리 (1) - 워터쉐드 watershed 알고리즘 rainfall inpaint 워터셰드 지난 시간에 우리는 영상 일부분이 훼손된 영상이나 일부분을 지우는 inpaint 기술에 대해 알아봤습니다. h... blog.naver.com 이번에는 GrabCut 알고리즘에 대해 간단히 알아보도록 하겠습니다. GrabCut 알고리즘이란? GrabCut 알고리즘은 영상에서 배경과 전경을 구분하여 전경을 추출하는 알고리즘으로 그래프 컷(graph cut) 기반의 영역 분할 알고리즘 입니다..
[OpenCV][C++] 영상 분할 (image segmentation) 총정리(2) - 워터쉐드 (watershed) 알고리즘, cv::distanceTransform 이전에는 마우스 이벤트를 활용하여 markers 영상을 만들고 이를 기반으로 watershed 알고리즘을 수행하는 방법을 알아보았습니다. https://blog.naver.com/dorergiverny/223099559423 [OpenCV][C++] 영상 분할 image segmentation 총정리 (1) - 워터쉐드 watershed 알고리즘 rainfall inpaint 워터셰드 이번에는 영상 분할의 기본적인 방법인 워터쉐드 알고리즘에 대해 간단히 알아 본 후 영상 분할 실습을 해 ... blog.naver.com (1) Watershed Segmentation watershed segmentation을 수행하는 방법을 알아보겠습니다. 이번에는 거리변환(distance Transform) 함수에 대..
[OpenCV][C++] 훼손된 영상 복원하기 - cv::inpaint() 사진속 그림 지우기 제거 image restore 회복 되돌리기 이번에는 좀 재미있는 함수를 알아보려고 합니다. 훼손된 영상을 주변 픽셀 정보를 이용하여 채워넣는 방법입니다. 이 함수를 알아보기 위해 이전에 알아보았던 마우스 이벤트를 사용해볼께요. https://m.blog.naver.com/dorergiverny/223084092098 [OpenCV][C++] 마우스 이벤트 처리 총정리 - onMouse setMouseCallback EVENT_MOUSEMOVE LBUTTONDOWN 이전에는 윈도우 생성 방법과 키보드 입력을 받아 이벤트를 처리하는 방법에 대해 알아보았습니다. https:/... blog.naver.com inpaint()의 원형은 아래와 같습니다. src 입력 영상 inpaintMask inpaint 할 마스크 영상 dst 출력 영상 inpaint..
[OpenCV][C++] 영상 가장자리(Border) 픽셀 확장 방법 총정리 - 필터링 적용 copyMakeBorder 지난 시간에 평균 필터(Average Filter)에 대해 알아보면서 다루지 않은 부분이 있어요 https://m.blog.naver.com/dorergiverny/223096804790 [OpenCV][C++] 평균 필터 영상 스무딩smoothing 연산 블러링 blurring 총정리 - boxFilter filter2D image 부드럽 이번에는 필터링에 대해 간단히 알아 본 후에 영상 노이즈 제거하는 방법 중 가장 기본인 평균 필터에 대해... blog.naver.com 바로 가장자리 픽셀 확장 방법에 대한 내용이에요. cv::boxFilter()의 마지막 인자로 borderType이란 인자가 있었어요. base.hpp를 보면, 아래와 같이 가장자리 타입 상수값들이 있어요. 제가 직접 실험해 본 결..
[OpenCV][C++] 평균 필터 스무딩(smoothing) 연산 블러링(blurring) 총정리 - boxFilter filter2D 이번에는 필터링에 대해 간단히 알아 본 후에 영상 노이즈 제거하는 방법 중 가장 기본인 평균 필터에 대해 알아보겠습니다. 그리고 opencv에서 제공하는 평균 필터들의 속도를 측정하여 평균 필터를 적용할 때 어떠한 함수를 사용하는 것이 가장 좋은지를 확인해보겠습니다. 필터링(Filtering) 이란? 필터링은 계산하고자하는 대상 픽셀과 그 주변 픽셀들을 활용하여 새로운 픽셀 값을 얻는 방법입니다. 이 때 주변 픽셀을 어느 범위까지 어떻게 해야 할지를 결정해야 합니다. 이런 역할을 하는 것이 바로 커널(kernel) 또는 윈도우(window), 마스크(mask)라고 불리는 행렬입니다. 일반적으로 우리가 사용하는 커널은 아래와 같은 모양들이 있습니다. 사실 정사각형의 커널을 가장 많이 사용하고 있으며, 원소..
[OpenCV][C++] 동일 영상 판별(체크)하는 쉽고 빠른 방법 - 같은 영상인지 확인 countNonZero convertTo 우리가 영상처리를 하다보면 어떠한 처리 결과 영상이 같은지를 확인하고 싶을 때가 있습니다. 이번에는 쉽고 빠르게 두 영상이 같은지를 확인하는 방법에 대해 알아보겠습니다. countNonZero() 로 알아내기 우리가 가장 쉽게 생각할 수 있는 방법이 두 영상의 차영상을 구해서 모든 픽셀이 0인지 아닌지를 확인하는 방법입니다. 영상을 먼저 입력 받습니다. 그리고 동일한 영상을 만들기 위해 clone을 합니다. cv::Mat src = cv::imread("lena_color.bmp", cv::IMREAD_GRAYSCALE); cv::Mat src_clone = src.clone(); 그 이후 cv::subtract() 또는 cv::absdiff() 를 이용하여 두 영상의 차영상을 계산합니다. cv::Mat..
[OpenCV][C++] 영상 외곽선(contour) 추출 총정리(2) - cv::drawContours cvtColor 컨투어 찾기 바깥 라인 convexhull 지난번에 영상의 윤곽선을 추출하는 findContours()에 대해 자세히 알아 봤습니다. https://m.blog.naver.com/dorergiverny/223077650900 [OpenCV][C++] 영상 외곽선(contour) 추출 총정리(1) - cv::findContours 윤곽선 경계 컨투어 inRange 검출 지난 시간에는 영상 레이블링에 대해 알아봤습니다. 레이블링을 하면서 object의 크기를 판별하고 크기를 ... blog.naver.com 이번에는 findContours()로 찾은 윤곽선을 영상 위에 그리는 방법에 대해 알아보겠습니다. drawContours drawContours()의 원형은 아래와 같습니다. src 윤곽선을 그릴 영상, gray, color 영상 가능 conto..