C# OpenCvSharp 윤곽 그리기의 6단계를 배웠습니까? (6)

윤곽선 그리기는 다음 6단계를 통해 수행됩니다.

  1. 이미지 읽기 Cv2.ImRead();
  2. 이미지를 회색조로 변환합니다. Cv2.CvtColor();
  3. 이미지를 흐리게 하고 Cv2.Blur()를 필터링합니다.
  4. 가장자리 감지 Canny();
  5. 윤곽 찾기Cv2.FindContours();
  6. 윤곽 그리기Cv2.DrawContours();

레전드(포커로 즐겁게 놀아주세요)

 // 1、读取图像
 Mat image = Cv2.ImRead("0.jpg", ImreadModes.Color);

 // 2、 将图像转换为灰度图像
 Mat src_gray = new Mat();
 Cv2.CvtColor(image, src_gray, ColorConversionCodes.BGR2GRAY);

 // 3、 滤波
 Cv2.Blur(src_gray, src_gray, new OpenCvSharp.Size(3, 3));
 // 4、Canny边缘检测
 Mat canny_Image = new Mat();
 // 输入、输出、最小阀值、最大阀值
 Cv2.Canny(src_gray, canny_Image, 100, 200);

 //5、查找轮廓
 // 寻找轮廓
 OpenCvSharp.Point[][] contours;
 HierarchyIndex[] hierarchy;

 Cv2.FindContours(canny_Image, out contours, out hierarchy, RetrievalModes.Tree, ContourApproximationModes.ApproxNone, new OpenCvSharp.Point(0, 0));
 // 将结果画出并返回结果
 Mat dst_Image = Mat.Zeros(canny_Image.Size(), image.Type());
 for (int i = 0; i < contours.Length; i++)
 {
     // 轮廓的颜色为绿色
     Scalar color = new Scalar(0, 255, 0);
     Cv2.DrawContours(dst_Image, contours, i, color, 2, LineTypes.Link8, hierarchy);
     
 }
 Cv2.ImShow("dst_Image", dst_Image); // 显示图像
 Cv2.WaitKey(0);

1. 이미지 Cv2.ImRead() 읽기, 더 이상 도입되지 않음

2. 이미지를 회색조 이미지 Cv2.CvtColor()로 변환합니다. 도입되지 않습니다.

3. 필터 Cv2.Blur()

이미지를 흐리게 하는 데 사용됩니다.

Cv2.Blur(src, dst, ksize, 앵커,borderType,borderValue)

매개변수 설명하다
소스 단일 채널 또는 다중 채널 이미지일 수 있는 입력 이미지.
일광 출력 이미지는 입력 이미지와 동일한 크기와 깊이를 갖습니다.
k사이즈 블러 커널의 크기입니다. 가로, 세로 방향의 코어 크기를 지정하는 2D Size 구조입니다. 너비와 높이는 (3,3), (5,5) 등과 같이 양의 홀수여야 합니다.
블러 커널의 앵커 포인트 위치이며 기본값은 (-1,-1)이며 커널의 중심점을 나타냅니다.
테두리 유형 테두리 모드, 기본값은 BorderType.Default입니다. 이는 기본 테두리 모드를 사용함을 의미합니다.
경계값 테두리 모드가 BorderType.Constant일 때 사용되는 테두리 값, 기본값은 Scalar(0)입니다.


 새로운 OpenCvSharp.Size(3, 3) 효과

4. 가장자리 감지 cv2.Canny()

Canny 가장자리 감지 알고리즘의 원리는 먼저 이미지에 대해 가우시안 필터링을 수행한 다음 Sobel 연산자를 통해 이미지의 기울기를 계산한 다음 비최대 억제를 통해 로컬 최대값을 가장자리 점으로 추출하고 마지막으로 가장자리를 연결하는 것입니다. 이중 임계값 감지를 통해 포인트를 지정합니다.

 cv2.Canny(이미지, 가장자리, 임계값1, 임계값2, 조리개 크기, L2gradient)

매개변수 설명하다
영상 입력 이미지는 단일 채널 회색조 이미지 또는 3채널 컬러 이미지일 수 있습니다.
가장자리 출력 에지 이미지는 단일 채널 이진 이미지입니다.
임계값1 첫 번째 임계값은 가장자리 강도의 낮은 임계값 필터링에 사용됩니다.
임계값2 두 번째 임계값은 가장자리 강도의 높은 임계값 필터링에 사용됩니다.
조리개 크기 Sobel 연산자의 조리개 크기, 기본값은 3입니다.
L2그라디언트 경사 진폭을 계산할 때 L2 표준을 사용할지 여부를 지정하는 부울 값입니다. 기본값은 false입니다.

 Cv2.Blur(src_gray, src_gray, new OpenCvSharp.Size(3, 3)) 效果

5. 윤곽 찾기 Cv2.FindContours() 

이는 이미지의 윤곽선을 감지하는 데 사용됩니다. 즉, 이미지의 모든 연속 점 집합을 찾는 데 사용됩니다. 이 함수는 바이너리 이미지를 입력해야 하며, 이미지의 배경색은 검정색이고 전경색은 흰색입니다. 이 함수는 모든 윤곽선을 포함하는 목록을 반환하며, 각 윤곽선은 점의 배열입니다.

Cv2.FindContours(이미지, 모드, 방법[, 윤곽선[, 계층구조[, 오프셋]]])

 FindContours(InputArray 이미지, Point[][] 윤곽선, HierarchyIndex[] 계층 구조, RetrievalModes 모드, ContourApproximationModes 메서드, Point? 오프셋 = null) 

지침:

  • 입력 이미지는 이진 이미지여야 합니다. 즉, 흑백 픽셀 값만 포함합니다.
  • 윤곽선 감지는 이진 이미지에만 적용할 수 있으므로 일반적으로 기능을 적용하기 전에 이미지 임계값 지정 또는 기타 이미지 처리 작업이 필요합니다.

6. 윤곽 그리기 Cv2.DrawContours()

이미지에 감지된 윤곽을 그려 지정된 색상과 선 너비로 이미지의 경계를 표시합니다.

  public static void DrawContours(InputOutputArray 이미지, IEnumerable<IEnumerable<Point>> 윤곽선, int ContourIdx, 스칼라 색상, int 두께 = 1, LineTypes lineType = LineTypes.Link8, IEnumerable<HierarchyIndex>? 계층 구조 = null, int maxLevel = int.MaxValue , 점? 오프셋 = null)

Acho que você gosta

Origin blog.csdn.net/hb_ljj/article/details/135181825
Recomendado
Clasificación