🔥 Programming/OpenCV
[OpenCV4] C# OpenCV4 윤곽선 검출
스쳐가는비
2023. 2. 7. 23:13
윤곽선 검출
윤곽선 검출은 실제로 template matching 만큼 많이 쓰는것 같다.
활용도가 정말 많아서 알아두면 좋은 기능이다.
아래는 사용 이미지 전후 차이이다.
윤곽선 검출은 활용도가 높지만 구현이 간단하기에 사용하기가 쉽다.
아래 코드를 보자.
사용하고자 하는 이미지를 저장할 Mat인 src와 이미지를 흑백으로 바꿔줄 bin 그리고 실제로 윤곽선을 그려줄 temp에
OpenCV4에서 제공하는 FindContours를 사용하면 간단하다.
FindContours 사용방법과 활용도는 지난글의 코드에 달린 주석을 보면 이해하기가 쉬우니 참조하자.
https://hyun-jun5.tistory.com/88
Code ( C# )
using OpenCvSharp;
using OpenCvSharp.Extensions;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Point = OpenCvSharp.Point;
namespace ContourSample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ImageProcessing();
}
public void ImageProcessing()
{
Mat src = BitmapConverter.ToMat(Properties.Resources.Image);
Mat temp = new Mat();
src.CopyTo(temp);
Cv2.ImShow("scr", src);
Mat bin = new Mat();
Cv2.CvtColor(src, 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(temp, contour1, i, Scalar.Red, 1, LineTypes.AntiAlias);
}
Cv2.ImShow("result", temp);
}
}
}