C# OpenCV 강좌 : 제 33강 - Blob 윤곽선 검출
윤곽선(Contour)
영상이나 이미지에서 라벨링
된 이미지에서 윤곽선(컨투어)를 검출하기 위해 사용합니다.
원본(Source, src)
은 영상이나 이미지를 사용합니다.
클래스 코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
using OpenCvSharp.Blob;
namespace Project
{
class OpenCV : IDisposable
{
IplImage bin;
IplImage blobcontour;
public IplImage Binary(IplImage src)
{
bin = new IplImage(src.Size, BitDepth.U8, 1);
Cv.CvtColor(src, bin, ColorConversion.BgrToGray);
Cv.Threshold(bin, bin, 50, 255, ThresholdType.Binary);
return bin;
}
public IplImage BlobContourImage(IplImage src)
{
blobcontour = new IplImage(src.Size, BitDepth.U8, 3);
bin = this.Binary(src);
CvBlobs blobs = new CvBlobs();
blobs.Label(bin);
foreach (KeyValuePair<int, CvBlob> item in blobs)
{
CvBlob b = item.Value;
CvContourChainCode cc = b.Contour;
cc.Render(blobcontour);
CvContourPolygon polygon = cc.ConvertToPolygon();
foreach (CvPoint p in polygon)
{
blobcontour.Circle(p, 1, CvColor.Red, -1);
}
}
return blobcontour;
}
public void Dispose()
{
if (bin != null) Cv.ReleaseImage(bin);
if (blobcontour != null) Cv.ReleaseImage(blobcontour);
}
}
}
세부 코드
using OpenCvSharp.Blob;
CvBlobs
함수를 사용하기 위해서는 네임스페이스에 using OpenCvSharp.Blob;
를 선언해야 사용할 수 있습니다.
blobcontour = new IplImage(src.Size, BitDepth.U8, 3);
bin = this.Binary(src);
bin
는 라벨링
에 사용될 이미지입니다.
이 이미지를 통하여 라벨링을 진행합니다. 라벨링은 이진화 이미지를 사용
합니다.
CvBlobs blobs = new CvBlobs();
blobs.Label(bin);
CvBlobs blobs = new CvBlobs();
을 이용하여 라벨링을 하기 위해 생성자
를 만듭니다.
blobs.Label(bin);
를 통하여 라벨링
을 진행합니다. 이진화 이미지
를 사용합니다.
foreach (KeyValuePair<int, CvBlob> item in blobs)
{
CvBlob b = item.Value;
CvContourChainCode cc = b.Contour;
cc.Render(blobcontour);
CvContourPolygon polygon = cc.ConvertToPolygon();
foreach (CvPoint p in polygon)
{
blobcontour.Circle(p, 1, CvColor.Red, -1);
}
}
foreach
문을 이용하여 라벨링
정보를 확인할 수 있습니다.
item
값을 이용하여 라벨링 정보를 확인 가능합니다.
CvContourChainCode
를 이용하여 b
에서 Contour
값을 받아옵니다.
이후 cc.Render(blobcontour)
를 이용하여 blobcontour에 윤곽선(컨투어)를 그립니다.
CvContourPolygon
을 이용하여 폴리곤
형태로 변환합니다.
다시 한 번 foreach
문을 이용해 blobcontour에 폴리곤을 그립니다.
출력 결과
공유하기


댓글 남기기