WPF OpenCV 프로젝트 #33: Image Pyramid (Gaussian & Laplacian)

ImagePyramid

Image Pyramid (이미지 피라미드)를 주제로 Gaussian Pyramid (가우시안 피라미드)와 Laplacian Pylamid (라플라시안 피라미드)에 대해 OpenCvSharp에서 제공하는 함수들을 이용해서 순차적으로 간단히 개념을 정리하고, WPF OpenCV 프로젝트에 구현해 보겠습니다.이전 포스팅(#32)에서는 Morphology (모폴로지: 형태학)를 주제로 Erosion (침식), Dilation (팽창), Opening (열림), Closing (닫힘), Gradiant (그레디언트), Top-Hat, Black-Hat 에 대해 OpenCvSharp에서 제공하는 함수들을 이용해서 한꺼번에 순차적으로 간단히 개념을 정리하고, … 더 읽기

WPF OpenCV 프로젝트 #30: Filters (Average Blur, Box Filter, Gaussian Blur, Median Blur, Bilateral Filter)

Image Blur-Bilateral Filter

Average Blur, Box Filter, Gaussian Blur, Median Blur, Bilateral Filter 들을 이번 포스팅을 통해OpenCvSharp에서 제공하는 함수들을 이용해서 한꺼번에 순차적으로 간단히 개념을 정리하고, WPF OpenCV 프로젝트에 구현해 보겠습니다.이전 포스팅(#29)에서 Filter (Blur, Sharpen, Edge) 효과를 Kernel Matrix (커널 행렬: 3 x 3)을 사용자가 직접 만들어서 Cv2.filter2D() 함수를 이용해서 처리하는 방법을 나름 깊이 있게 다뤘습니다. 사용자가 적용하려는 filter … 더 읽기

WPF OpenCV 프로젝트 #22: Geometric Transform (이동, 회전, 확대/축소)

Geometric Transform Image

Geometric Transform(기하학적 변환)에서 이미지의 이동과 회전, 확대/축소에 대해 정리하고, WPF OpenCV 프로젝트에 구현하도록 하겠습니다. 지난 포스팅(#21)에서는 히스토그램 버그를 잡느라 잠시 쉬어갔었죠? 오늘은 드디어 잠시 미뤄뒀던 Geometric Transform(기하학적 변환)을 구현해 볼 차례입니다. 그동안 우리는 픽셀의 ‘색상’이나 ‘밝기’를 바꾸는 작업(히스토그램, 정규화 등)을 주로 했습니다. 하지만 오늘 할 작업은 픽셀의 ‘위치’를 바꾸는 작업입니다. 이미지를 옮기고(Translation), 돌리고(Rotation), 크기를 조절하는(Scaling) … 더 읽기

WPF OpenCV 프로젝트 #21: Improve Histogram Bug (히스토그램 버그 개선)

Histogram Bug

Histogram Bug 를 이번 글에서는 개선하여 WPF OpenCV 프로젝트를 업데이트 하겠습니다. 지난 포스팅(#20) 마지막에 제가 이렇게 글을 쓰고 마무리했었죠. “다음에는 영상의 기하학적 변환(이동, 회전, 확대/축소)을 다루겠습니다!” 라구요. 하지만… 제가 포스팅 된 내용을 읽고 계신 분들께 알리지 않고 은근슬쩍 모른 척 넘어가려던 버그가 하나 있었습니다. 댓글이 없어서 ‘아무도 모르거나, 알아서들 고쳤으리라~’ 하고 묻어두려 했지만, 다음 글을 … 더 읽기

WPF OpenCV 프로젝트 #16: Adaptive Threshold (적응형 이진화) 구현

Adaptive Threshold 적용 이미지 (GaussianC)

Adaptive Threshold (적응형 이진화)를 구현해 이미지에 있는 그림자 문제도 어느 정도 해결 가능하도록 WPF OpenCV 프로젝트에 적용해 보도록 하겠습니다. 지난 포스팅(#15)에서 우리는 Otsu 알고리즘을 구현했습니다. “자동으로 임계값을 찾아준다” 라는 정말 똑똑한 녀석이었죠. 하지만 그 똑똑한 Otsu에게도 치명적인 약점이 있었으니… 바로 “조명빨“을 심하게 탄다는 것입니다. 이미지 한쪽에 그림자가 져 있거나, 조명이 불균일하면 Otsu(전역 이진화)는 멍청해집니다. 그림자 … 더 읽기

WPF OpenCV 프로젝트 #15: Otsu Threshold (오츠 알고리즘) 구현

Otsu Threshold

Otsu Thresold (오츠 알고리즘)을 WPF OpenCV 프로젝트에 구현하도록 하겠습니다. 앞선 포스팅들에서 길었다 생각하면 길 수 있는 UI의 터널을 지나왔습니다. ROI(관심 영역)를 자르고(Crop), 저장하고, 그 위에 도형을 그리고… 별로 한건 없는 것 같은데 몇 가지 기능들을 구현했죠. (1편부터 14편까지 대부분을 UI(View)만 붙들고 있었으니 지칠 만도 합니다.) 사실 UI 기능을 더 욕심내자면 끝도 없겠지만, 애초에 이 프로젝트를 … 더 읽기

WPF OpenCV 프로젝트 #12: ROI(관심 영역) 크기 조절 및 이동 기능 구현 (Interaction)

이번 포스팅에서는 ROI(관심 영역) 크기 조절 및 이동 기능 구현(Interaction)을 WPF OpenCV 프로젝트에 구현하겠습니다. 지난 포스팅(#11)에서 ROI 사각형 주변에 8개의 크기 조절 핸들(Picker)을 예쁘게 배치했습니다. 하지만 아직은 핸들을 잡고 흔들어도 아무 반응이 없었죠? (그림의 떡이었죠.) 오늘은 드디어 이 Picker 핸들에 생명을 불어넣어 ROI 크기를 늘리고 줄이는 기능, 그리고 잘못 그린 ROI를 통째로 이동 시키는 기능을 … 더 읽기

WPF OpenCV 프로젝트 #10: ROI(관심 영역) 자르기 및 저장 구현

이번에는 ROI(관심 영역) 자르기와 저장 기능을 WPF OpenCV 프로젝트에 구현해 보죠.지난 포스팅에서 OverlayCanvas를 이용해 ROI를 그릴 UI 뼈대를 만들었습니다. 이제 그 뼈대에 살을 붙여 실제로 작동하는 코드를 만들 차례입니다.오늘은 작업량이 좀 있습니다. 특히 마지막 좌표 계산 부분은 중요하니 끝까지 잘 따라와 주세요! Model: OpenCVService에 자르기 기능 추가 영상 처리에서 관심 영역을 잘라내는 것을 **크롭(Crop)**이라고 하죠? … 더 읽기

WPF OpenCV 프로젝트 #5: XAML UI 디자인 및 데이터 바인딩 (View)

WPF OpenCV 프로젝트 UI 실행 화면

XAML UI 디자인 및 데이터 바인딩(View)을 WPF OpenCV 프로젝트에 이제 추가해 보도록 하겠습니다. 지난 포스팅에서 ViewModel(두뇌)과 Model(심장)을 모두 구현했습니다. 이제 마지막 퍼즐인 View(얼굴)를 만들 차례입니다. 이번 시간에는 MainWindow.xaml을 작성하여 사용자가 이미지를 보고 조작할 수 있는 UI를 구성하고, MVVM 패턴의 꽃이라 할 수 있는 데이터 바인딩(Data Binding)이 어떻게 이루어지는지 자세히 알아보겠습니다. XAML UI 레이아웃 구상 먼저 … 더 읽기

WPF OpenCV 프로젝트 #3: OpenCVService 구현 및 이미지 로드

지난 포스팅에서 MVVM 구조를 잡았으니, 이제 WPF OpenCV 프로젝트의 심장이라고 할 수 있는 OpenCVService.cs를 작성할 차례입니다. 이 클래스는 OpenCV 라이브러리를 사용해 이미지를 불러오고, 영상처리를 수행하며, 결과를 UI에 보여줄 수 있는 형태로 변환하는 역할을 담당합니다 . MVVM 패턴에서는 이 클래스를 Model 데이터를 다루는 서비스로 이해하시면 됩니다 . MVVM 기반 영상 처리 프로젝트를 위한 기능 설계 코드를 … 더 읽기