WPF OpenCV 프로젝트 #19: Equalize (히스토그램 평탄화) 구현

OpenCV Equalize 적용 이미지

Equalize (히스토그램 평탄화)와 관련하여 WPF OpenCV 프로젝트 추가해 보도록 하겠습니다. 지난 포스팅(#18)에서는 Normalize (정규화)를 통해 좁은 범위에 몰려 있는 픽셀들을 0~255 전체 구간으로 쫙 펴주는(Stretch) 작업을 했습니다. 하지만 정규화만으로는 해결되지 않는 ‘진짜 골 때리는 애들’ 이 있습니다. 바로 픽셀 값들이 한 곳에 극단적으로 뭉쳐 있는 경우입니다. 이럴 때 필요한 것이 바로 오늘 다룰 Histogram Equalization … 더 읽기

WPF OpenCV 프로젝트 #18: Normalize (정규화)

Nomalize Histogram Graph

Normalize (정규화) 처리를 WPF OpenCV 프로젝트에 구현하도록 하겠습니다. 지난 포스팅(#17)에서는 영상의 밝기 분포를 확인하는 히스토그램(Histogram)을 구현했습니다. 히스토그램을 통해 “아, 이 사진은 픽셀들이 너무 어두운 곳에만 몰려있네?” “어라 ! 이 사진은 픽셀들이 너무 밝은 곳에만 몰려있네? “라는 걸 알았다면, 이제는 그걸 수정할 차례입니다. 바로 Normalize (정규화) 기능을 통해서 말이죠. 이번에는 정규화 라는 녀석의 개념을 제가 가능하다면 … 더 읽기

WPF OpenCV 프로젝트 #17: Histogram (히스토그램) 분석 및 그래프 그리기 (Cv2.CalcHist)

Histogram Graph

영상에서 Histogram (히스토그램) 분석 및 Histogram 데이터를 이용하여 그래프를 그려 분석 할 수 있도록 WPF OpenCV 프로젝트에 구현하겠습니다. 지난 포스팅(#15, #16)에서 Otsu와 Adaptive Threshold를 다루면서 “히스토그램(Histogram)”이라는 단어를 스치듯 언급했었습니다. 기억나시나요? “히스토그램에서 두 개의 산봉우리(Bimodal)가 생길 때, Otsu 알고리즘은 그 사이 골짜기를 찾아냅니다.” (Post #15 참조) 오늘은 바로 그 히스토그램을 직접 구현해 볼 차례입니다. 단순히 “어떤 … 더 읽기

WPF OpenCV 프로젝트 #14: Bug 수정 (Zoom 측정 시 ROI 좌표 틀어짐 해결) 및 Line Distance (직선 거리 측정) 구현

Bug 수정 (Zoom 측정 시 ROI 좌표 틀어짐 해결) 및 직선 거리 측정을 WPF OpenCV 프로젝트에 구현하겠습니다. 지난 13편까지 우리는 도형 그리기에 ROI 설정까지 정말 많은 기능을 숨 가쁘게 구현해 왔습니다. 그런데 혹시… 뭔가 이상한 점 못 느끼셨나요? (12편부터 계속되던 문제였는데 말이죠.) ROI 사각형을 예쁘게 그려 놓고, 마우스 휠을 돌려 이미지를 확대/축소(Zoom In/Out) 했을 때, … 더 읽기

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

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

WPF OpenCV 프로젝트 #11: ROI 이미지 저장 및 크기 조절 핸들(Resize Handle) UI 구현

WPF ROI Resize Handle 실행 화면

ROI 이미지 저장 및 ROI 영역 사각형의 크기 조절 핸들(Resize Handle)을 WPF OpenCV 프로젝트에 구현하도록 하겠습니다.지난 포스팅(#10)에서 ROI(관심 영역)를 자르는 기능까지 구현했는데, 글을 올리고 나서 보니 “저장하기“를 빼 먹었더군요. (가끔은 중요한 걸 깜빡하곤 하죠? 저만 그런 거 아니죠?) 그래서 오늘은 1. ROI 이미지 저장 기능을 마무리하고, 사용하다 보니 너무 불편했던 2. ROI 영역 수정(크기 조절) … 더 읽기

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

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

WPF OpenCV 프로젝트 #9: ROI(관심 영역) 설정을 위한 UI 구성 (OverlayCanvas)

ROI(관심 영역) 설정을 위한 UI 구성(OverlayCanvas)을 WPF OpenCV 프로젝트에서 다루겠습니다. 지난 포스팅에서 우리는 이미지를 불러와 확대/축소(Zoom)하고, 휠 버튼으로 이동(Panning)하는 기능까지 구현했습니다. 이제 영상 처리의 핵심이라 할 수 있는 관심 영역(ROI, Region of Interest) 기능을 구현해 볼 차례입니다. 전체 이미지를 통째로 처리하는 경우도 있지만, 현업에서는 특정 부분만 잘라내서 검사하거나, 모델을 등록하는 경우가 훨씬 빈번하니까요. 아무튼 ROI … 더 읽기

WPF OpenCV 프로젝트 #8: StatusBar 구현 및 실시간 좌표 표시

StatusBar 구현과 실시간 좌표 표시 기능을 이번 WPF OpenCV 프로젝트에 구현하도록 하겠습니다. 지난 포스팅까지 우리는 기본적인 UI 틀을 만들고, 마우스를 이용해 이미지를 확대/축소/이동(Zoom/Pan) 하는 기능까지 구현했습니다. 혹시 기억하시나요? 맨 처음 MainWindow.xaml에서 Grid를 구성할 때, Row를 2개(RowDefinition) 만들어 놓고 정작 1개만 썼던 진실을 눈치 채셨나요? 그리고 MainWindow.xaml.cs의 ZoomBorder_MouseMove 함수 마지막에 “// 좌표 출력”이라고 주석만 달아 놓고 … 더 읽기

WPF OpenCV 프로젝트 #7: WPF 이미지 확대 및 이동 구현 (Zoom/Pan)

Wafer 로딩 이미지

이번 시간에는 WPF 이미지 확대 및 이동 기능을 본격적으로 구현해 보겠습니다. 지난 포스팅에서 Border와 Canvas를 이용해 확대/축소를 위한 UI 그릇을 만들었습니다. 하지만 정작 실행해 보면 마우스 휠을 굴려도 WPF 이미지 확대 축소는 없었을 겁니다. 이벤트만 연결해 놓고 실제 코드를 작성하지 않았기 때문이죠.이번 시간에는 MainWindow.xaml.cs에 생명을 불어넣어 보겠습니다. 따라서 WPF OpenCV 프로젝트 #7에서는 마우스 이벤트로 이미지를 … 더 읽기