[c++] 이진화와 팽창 및 침식
목차
이진화
이진화란 그레이스케일 이미지를 흑백 이미지로 변환하는 과정을 말합니다. 주어진 임계값 이상이면 1(흰색), 임계값 미만이면 0(검은색)으로 픽셀을 설정하여 처리합니다.
팽창
팽창은 주어진 구조 요소(커널)와 이미지를 스캔하여 커널과 일치하는 부분 중 가장 큰 값으로 이미지를 확장하는 연산입니다. 주변의 밝은 영역을 더 강조시켜 물체를 확대시킵니다.
침식
침식은 팽창과 반대로 작용합니다. 이미지를 스캔하여 커널과 일치하는 부분 중 가장 작은 값으로 이미지를 축소하는 연산입니다. 주변의 어두운 영역을 더 강조하여 작은 구멍을 메꿔줍니다.
C++ 예제 코드
아래는 OpenCV 라이브러리를 사용하여 이미지를 이진화, 팽창, 침식하는 간단한 C++ 코드 예제입니다.
#include <opencv2/opencv.hpp>
int main() {
// 이미지 로드
cv::Mat image = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);
// 이진화
cv::Mat binaryImage;
cv::threshold(image, binaryImage, 128, 255, cv::THRESH_BINARY);
// 팽창
cv::Mat dilatedImage;
cv::dilate(binaryImage, dilatedImage, cv::Mat());
// 침식
cv::Mat erodedImage;
cv::erode(binaryImage, erodedImage, cv::Mat());
// 결과 이미지 저장
cv::imwrite("binary_output.jpg", binaryImage);
cv::imwrite("dilated_output.jpg", dilatedImage);
cv::imwrite("eroded_output.jpg", erodedImage);
return 0;
}
위 코드는 OpenCV 라이브러리를 사용하여 이미지를 이진화, 팽창, 침식하는 간단한 예제입니다. 이미지를 로드하고 필요한 연산을 수행한 후, 결과 이미지를 저장합니다.
지금까지 이진화, 팽창 및 침식에 대해 알아보고, 각각의 사용법을 C++ 예제 코드를 통해 실습해보았습니다. 이러한 이미지 처리 기법은 컴퓨터 비전 및 이미지 분석 분야에서 널리 활용됩니다.
참고 문헌
- https://docs.opencv.org/master/d9/d61/tutorial_py_morphological_ops.html