C#/C# OpenCV/
C# OpenCV 7-8. Blob(1) 라벨링
2019. 12. 17.
대표함수
Cv2.CvtColor 색공간 변환 [프로그래밍/C# OpenCV] - C# OpenCV 5-1. 색공간 변환
Cv2.Threshold 이미지 이진화 [프로그래밍/C# OpenCV] - C# OpenCV 4-2. Binary
blobs.Label 라벨링 진행
blobs.RenderBlobs 라벨링 결과 출력
Example Code
using System;
using System.Windows.Forms;
using OpenCvSharp;
using OpenCvSharp.Blob;
namespace blobTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Mat src = new Mat("image.png");
Mat bin = new Mat();
Cv2.CvtColor(src, bin, ColorConversionCodes.BGR2GRAY);
Cv2.Threshold(bin, bin, 0, 255, ThresholdTypes.Otsu);
Cv2.ImShow("src", src);
Mat result = new Mat(src.Size(), MatType.CV_8UC3);
CvBlobs blobs = new CvBlobs();
blobs.Label(bin);
blobs.RenderBlobs(src, result);
foreach(var item in blobs)
{
CvBlob b = item.Value;
Cv2.Circle(result, b.Contour.StartingPoint, 4, Scalar.Red, 2, LineTypes.AntiAlias);
Cv2.PutText(result, b.Label.ToString(), new Point(b.Centroid.X, b.Centroid.Y),
HersheyFonts.HersheyComplex, 1, Scalar.Yellow, 2, LineTypes.AntiAlias);
}
Cv2.ImShow("result", result);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
}
}
Explain Code
using OpenCvSharp.Blob;
blob 라벨링을 사용하기 위해서는 using문 추가
Mat src = new Mat("image.png");
Mat bin = new Mat();
Cv2.CvtColor(src, bin, ColorConversionCodes.BGR2GRAY);
Cv2.Threshold(bin, bin, 0, 255, ThresholdTypes.Otsu);
Cv2.ImShow("src", src);
필요한 요소 선언
이미지 이진화
Mat result = new Mat(src.Size(), MatType.CV_8UC3);
CvBlobs blobs = new CvBlobs();
blob 라벨링에 필요한 요소 선언
blobs.Label(bin);
blobs.RenderBlobs(src, result);
blobs.Label(img)
img binary 이미지, 원본 이미지 이진화하여 사용
blobs.RenderBlobs(src, dst)
src 원본 이미지
dst 결과 이미지
foreach(var item in blobs)
{
CvBlob b = item.Value;
Cv2.Circle(result, b.Contour.StartingPoint, 4, Scalar.Red, 2, LineTypes.AntiAlias);
Cv2.PutText(result, b.Label.ToString(), new Point(b.Centroid.X, b.Centroid.Y),
HersheyFonts.HersheyComplex, 1, Scalar.Yellow, 2, LineTypes.AntiAlias);
}
반복문을 통해 추가로 원하는 값 출력
편의상 var로 선언했으나 System.Collections.Generic.KeyValuePair<int, CvBlob> 구조이다
※ item값
Label : 라벨링 번호
Centroid : 중심점
Area : 면적(moment00)
Angle() : 등고선 각도
Rect : 사각형 정보
Contour.StartingPoint : 라벨링 시작 위치
결과