使用OpenCVSharp使用C#查找边界框?

时间:2018-08-20 10:54:18

标签: c# opencv bounding-box opencvsharp

我使用https://github.com/shimat/opencvsharp包装器将opencv与C#一起使用。

实际上,我想得到我的国家的最大边界框。 倾斜无关紧要。我想要一个完美的直盒。

找到轮廓后的实际结果如下:

enter image description here

这是我的代码:

  Mat src = new Mat("index.jpg", ImreadModes.GrayScale);
  // Mat src = Cv2.ImRead("lenna.png", ImreadModes.GrayScale);
  Mat dst = new Mat();
  Mat dst2 = new Mat();

  Cv2.Canny(src, dst, hScrollBar1.Value, hScrollBar2.Value);
  //using (new Window("src image", src)) ;
  //using (new Window("dst image", dst)) ;

  // Find contours
  OpenCvSharp.Point[][] contours; //vector<vector<Point>> contours;
  HierarchyIndex[] hierarchyIndexes; //vector<Vec4i> hierarchy;

  Cv2.FindContours(dst, out contours, out hierarchyIndexes, RetrievalModes.External, ContourApproximationModes.ApproxSimple);
  using (new Window("dst image", dst)) ;

我看到有一个函数BoundingRect

 Cv2.BoundingRect()

对我来说听起来不错。但是此函数需要一个名为curve的InputArray。 我有点困惑。

如果有人可以给我一个提示,那将很棒。

谢谢

2 个答案:

答案 0 :(得分:2)

轮廓[0]似乎根本不是最大的轮廓。您需要遍历所有轮廓并将每个区域与一个临时的最大轮廓进行比较。

答案 1 :(得分:0)

我自己提供解决方案。

 var biggestContourRect = Cv2.BoundingRect(contours[0]);

        Cv2.Rectangle(dst,
            new OpenCvSharp.Point(biggestContourRect.X, biggestContourRect.Y),
            new OpenCvSharp.Point(biggestContourRect.X + biggestContourRect.Width, biggestContourRect.Y + biggestContourRect.Height),
            new Scalar(255, 255, 255),2);

完成工作:)