저번 포스팅에서는 이제 OpenCV의 역할에 포스팅에서는 이제 openCV의 역할에 대해서 알아보았으니, 이제 OpenCV의 이미지 처리와 테이터 분석을 어떻게 통합 시킬지에 대해서 같이 학습해 봅시다.

이제 이미지를 처리한다. 이 뜻은 삭제한다가 아니고 일종의 모자이크 현상과 같이 이미지의 일부가 깨지거나 흐트러져 보이는 곳을 처리하는 것을 말합니다. 이때 저희는 수치 데이터를 사용하여 처리를 하여야 하는데 수치하면 무슨 모듈이 떠오를 까요 함수, 그래프, 정규화 등등 저는 M으로 시작하는 모듈이 생각나는 데 여러분들은 어떤가요?
네 맞습니다.
Matplotlib
OPEN CV와 Matplotlib을 같이 쓰면?
- 이미지 처리와 데이터 분석과의 통합
- OpenCV로 이미지를 처리한 뒤 Matplotlib로 결과를 시각화하면 더 직관적으로 처리 결과를 확인할 수 있다.
- 색상 표현 방식 차이 극복
- OpenCV는 기본적으로 이미지를 BGR 형식으로 다루며, Matplotlib는 RGB 형식을 사용. Matplotlib를 통해 OpenCV 이미지를 쉽게 변환하고 디스플레이 가능하다.
- OpenCV의 한계 극복
- OpenCV의 imshow는 간단한 이미지 표시만 가능, Matplotlib로 다중 이미지 비교, 축 조정, 제목 설정 등 고급 시각화 기능이 가능하다.
Matplotlib에서 이미지를 표시하는 함수
- imshow(데이터,[옵션])
- 데이터: 표시할 이미지 데이터 (numpy 배열). 2D 배열(그레이스케일) 또는 3D 배열(RGB, RGBA) 가능
- cmap : 컬러 맵, 이미지 데이터를 색상으로 변환하는 데 사용. ( 'gray', 'virdis', 'hot')
- norm : 데이터 값을 정규화하는 데 사용(matplotlib.colors.Normalize 객체)
- interpolation : 이미지를 확대 / 축소할 때 보간법 지정 ('nearest', 'bilinear', 'bicubic' 등)
- aspect 이미지의 종횡비 설정. ('auto', 'equal', 또는 특정 숫자)
- vmin, vmax 데이터의 최소값과 최대값을 지정하여 시각화 범위를 조정
이제 OpenCV에서 matplot이 무슨 역할이고 어떤 함수가 쓰이는지 확인하였으니, 본론으로 넘어갑시다.
이미지 전처리
이미지 필터링 및 노이즈 제거
- 노이즈란?
- 이미지에 존재하는 원하지 않는 랜덤한 변형(예 : 밝기 변화, 색상 왜곡 등)
- 일반적으로 촬영 과정에서 조명, 센서 한계, 압축 과정 등으로 인해 발생한다.
- 이미지에서 중요한 특징(엣지, 코너 등)을 추출할 때, 노이즈로 인해 잘못된 정보가 포함될 수 도있다
- 노이즈를 제거하면 이미지 데이터가 더 균일해지므로 압축 효율이 좋아지고, 데이터 전송 시 불필요한 정보가 줄어든다.
노이즈 제거하는 기법(통칭 블러링 기법이라고 부름)
- 평균 블러링 : blur(이미지, k사이즈(넓이, 높이))
- 이미지에서 특정 영역의 픽셀 값을 주변 픽셀들의 평균값으로 대체하여 노이즈를 줄이는 방법
- 매끄럽고 부드러운 이미지를 얻는 데 유용 함
- 가우시안 블러링 : GaussianBlur(이미지, k사이즈(넚이, 높이)(홀수), x방향표준편차)
- 평균 블러링보다 자연스러운 결과를 제공
- 미디언 블러링 : medianBlur(이미지, k사이즈(홀수))
- 커널 내 픽셀 값 중 중앙값으로 해당 픽셀 값을 설정
- 소금-후추 노이즈(Salt-and-Pepper Noise)를 제거하는 데 효과 적
근데 이렇게 블러 처리만 하면 도형의 윤곽선과 경계선이 흐릿 해지는 경우가 생깁니다.
그래서 우리는 다음 기법도 같이 사용합니다.
샤프닝 필터와 엣지 강조
- 샤프닝 필터와 엣지 강조는 이미지의 세부 정보를 강화하거나 특정 특징을 강조하기 위해 사용한다.
- 샤프닝
- 샤프닝 필터는 이미지에서 흐려진 세부 정보를 강조하여, 보다 선명하고 뚜렷한 이미지를 생성한다.
- 엣지 강조
- 이미지 내 객체의 윤곽선(경계선)을 뚜렷하게 만드는 과정, 객체의 경계를 강조하여 이미지 분석이 용이해진다.
- 경계, 형태를 강조하므로, 후속 작업(예: 객체 탐지, 세그먼테이션)이 더 정확해진다.
filter2D(이미지, 출력이미지깊이, 커널(numpy배열))
엣지 검출 및 경계선 추출
- 엣지 검출은 이미지에서 픽셀 값의 급격한 변화가 발생하는 부분(엣지)을 식별하는 작업이다.
- 물체 윤곽선 추출
- 이미지를 단순화하여 관심 영역 (ROI)의 경계를 강조한다.
- 물체의 모양이나 크기를 분석하기 위한 전처리 단계로 활용한다.
- 배경 제거 및 특징 추출
- 배경과 물체의 경계를 분리하여 배경을 제거하거나, 물체의 특징을 강조한다.
- 이미지 분석 및 인식
- 엣지를 사용하여 물체의 모양, 경계선, 세부 구조를 분석하고 이를 기반으로 물체를 인식
필터 종류
- Sobel 필터
- 이미지의 x와 y방향 기울기를 계산하여 엣지를 검출(1차 미분)
- 특정 방향(가로, 세로)의 엣지 검출에 유용
- Laolacian 필터
- 2차 미분을 통해 엣지를 검출
- 모든 방향의 엣지를 한 번에 검출
- 물체의 경계를 빠르게 파악
- Canny 엣지 검출
- 가장 널리 사용되는 엣지 검출 알고리즘
- 강한 엣지와 약한 엣지 간의 연결을 통해 주요 엣지를 검출
- 고정밀 객체 탐지 및 추적에 유리하며 특정 물체의 윤곽을 강조하여 물체를 분리
실습 이미지 파일에 엣지 검출 및 경계선 추출
- sovbel, laplacian, canny를 모두 사용해볼것
여기까지 왔다면 제가 질문 하나 하겠습니다.
영상이나 이미지를 전처리하는데 굳이 컬러야 할까요?
전 아니라고 생각합니다. 어차피 밝기를 기준으로 처리가 이루어지는데, 굳이 색깔을 추가하여 계산량을 증가 시킬 필요가 없습니다.
그러니 저희는 지금부터 이미지를 전처리 할때 그레이 스케일을 사용 할 것 입니다.
GRAY Scale
- 영상 및 이미지 전처리에서는 그레이스케일로 변환하는 것이 일반적
- 컴퓨터 비전 알고리즘이 색상 정보보다는 픽셀 강도(밝기)만을 사용하기 때문이다.
- 단일 색상을 사용함으로써 계산량이 크게 감소한다.
- 그레이스케일은 데이터를 간소화하고, 처리 속도를 높이며, 불필요한 색상 정보를 제거하는 데 유리하다.
오늘도 같이 공부하시느라 수고 많으셨습니다!!!!!!
다음시간에는 객체 탐지를 할 것입니다.

'python 시작하기' 카테고리의 다른 글
python OpenCV를 활용하여 얼굴 탐지를 해보자 (0) | 2025.01.10 |
---|---|
python OpenCV 컨투어 탐지 (0) | 2025.01.09 |
python OPEN CV를 활용하여 이미지를 저장해보자! (0) | 2025.01.08 |
python seaborn을 이용한 데이터 시각화 (0) | 2024.12.18 |
Python 데이터 시각화 (2) (1) | 2024.12.17 |