C# OpenCV labeling
2021. 1. 19. 09:00ㆍOpenCV/OpenCV C#
반응형
실행 코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
using OpenCvSharp.Blob;
namespace KeyboardLabeling
{
class Program
{
static void Main(string[] args)
{
Mat src = new Mat("../../keyboard.png");
Mat bin = new Mat();
Mat binary = new Mat();
src = src.SubMat(new Rect(300, 300, 1000, 1000)); // 이미지 자르기
Cv2.CvtColor(src, bin, ColorConversionCodes.BGR2GRAY); // gray
Cv2.Threshold(bin, binary, 125, 255, ThresholdTypes.BinaryInv); //이진화
Mat result = new Mat(src.Size(), MatType.CV_8UC3);
CvBlobs blobs = new CvBlobs();
blobs.Label(binary);
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("src", src);
Cv2.ImShow("binary", binary);
Cv2.ImShow("result", result);
Cv2.WaitKey(0);
}
}
}
결과화면
이미지 전처리
labeling
부족한 점
키보드의 사각형만 인식할 수 있게 이미지 전처리를 해야 하는데 부족했던 것 같다.
2021-01-18 키보드 라벨링 다시 도전
추가한 내용
- 면적에 따라 라벨링 설정
- 라벨링 번호 따로 설정
실행코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;
using OpenCvSharp.Blob;
namespace KeyboardLabeling
{
class Program
{
static void Main(string[] args)
{
Mat src = new Mat("../../keyboard.png");
Mat bin = new Mat();
Mat binary = new Mat();
src = src.SubMat(new Rect(300, 300, 1000, 1000)); // 이미지 자르기
Cv2.CvtColor(src, bin, ColorConversionCodes.BGR2GRAY); // gray
Cv2.Threshold(bin, binary, 125, 255, ThresholdTypes.BinaryInv); //이진화
Mat result = new Mat(src.Size(), MatType.CV_8UC3);
CvBlobs blobs = new CvBlobs();
blobs.Label(binary);
blobs.RenderBlobs(src, result);
int text = 1; // 번호
foreach (var item in blobs)
{
if (item.Value.Area > 40000) // 라벨링 면적 확인
{
CvBlob b = item.Value;
Cv2.Circle(result, b.Contour.StartingPoint, 8, Scalar.Red, 2, LineTypes.AntiAlias);
Cv2.PutText(result, text.ToString(), new Point(b.Centroid.X, b.Centroid.Y), // 라벨링 번호 설정 수정
HersheyFonts.HersheyComplex, 1, Scalar.Yellow, 2, LineTypes.AntiAlias);
text++;
}
}
Cv2.ImShow("src", src);
Cv2.ImShow("binary", binary);
Cv2.ImShow("result", result);
Cv2.WaitKey(0);
}
}
}
결과 화면
원본
이미지 전처리
라벨링
반응형
'OpenCV > OpenCV C#' 카테고리의 다른 글
C# OpenCV QRcode scanner (0) | 2021.01.27 |
---|---|
C# OpenCV Transformation (0) | 2021.01.17 |
C# OpenCV labeling Segmentation (0) | 2021.01.12 |
C# OpenCV histogram gray color BGR 그리기 (0) | 2021.01.09 |
C# OpenCV 이미지 전처리 (0) | 2021.01.06 |