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에 폴리곤을 그립니다.
출력 결과

공유하기
Kakao
Naver
Twitter
LinkedIn
Facebook
댓글 남기기