안녕하세요. 무리스입니다.
오늘은 C# OpenCv의 Contour 기능을 활용하여
이미지의 윤곽선을 검출하는 코드에 대해서 배워보도록 하겠습니다.
제가 연습삼아 만들어본 프로그램 구성은
【이미지 파일 불러오기】 → 【이미지 확인】 → 【Contour 검출】의
순서로 코드를 짜보았습니다.
OpenCv Contour 함수를 이용하면 윤곽선을 쉽게 검출할 수 있습니다.
먼저, OpenCv 라이브러리가 설치되지 않았다면
아래 작성한 OpenCv 설치 방법을 통해 준비합니다.
using OpenCvSharp;
private void open_btn_Click(object sender, EventArgs e)
{
String file_path = null;
// OpenFileDialog 초기 경로
openFileDialog1.InitialDirectory = @"C:\User\Desk";
// 확장자명 필터
openFileDialog1.Filter = "Image file (*.jpg, *.jpeg, *.jpe, *.jfif, *.png)
| *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
// FileName으로 설정하면 파일 경로+파일명으로 표시됨
file_path = openFileDialog1.FileName;
// TextBox에 파일 경로 지정
filepath_Text.Text = file_path;
}
}
private void Contour_btn_Click(object sender, EventArgs e)
{
Mat img = new Mat(filepath_Text.Text);
Mat img_contour = new Mat();
img.CopyTo(img_contour);
Mat bin = new Mat();
Cv2.CvtColor(img, bin, ColorConversionCodes.BGR2GRAY);
Cv2.Threshold(bin, bin, 127, 255, ThresholdTypes.Binary);
Mat hierarchy1 = new Mat();
Cv2.FindContours(bin, out Mat[] contour1, hierarchy1, RetrievalModes.Tree,
ContourApproximationModes.ApproxSimple);
for (int i = 0; i < contour1.Length; i++)
{
Cv2.DrawContours(img_contour, contour1, i, Scalar.Red, 1, LineTypes.AntiAlias);
}
Cv2.ImShow("Image_Contour", img_contour);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
Cv2.FindContours()는 이미지의 모든 Contour를 검색합니다.
Cv.2DrawContours()를 통해 Contours를 그립니다.
Cv2.ImShow()를 통해 Contour을 검출한 이미지를 새 창으로 띄웁니다.
위 코드 외에도 Contour 점 좌표 추출, 조건 검출 등 Contour을 활용한 많은 기능들이 있으니
Contour를 좀 더 깊게 공부하신다면 유용하게 쓸 수 있습니다.
추가적인 Contour 기능은 다음 포스팅에 작성하도록 하겠습니다.
끝까지 읽어주셔서 감사합니다.
[C#] OpenCV 설치 방법, 3분이면 끝 ! (0) | 2021.03.29 |
---|---|
패스트캠퍼스 올인원 패키지 : C++ 실력 완성 챌린지 참여 후기 (1) | 2020.12.10 |
[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {28} 회차 미션 (0) | 2020.11.29 |
[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {27} 회차 미션 (1) | 2020.11.28 |
[패스트캠퍼스 수강 후기] {C++실력완성} 100% 환급 챌린지 {26} 회차 미션 (0) | 2020.11.27 |