使用 OpenCVSharp 使用 C# 查找边界框?
Find bounding box with C# using OpenCVSharp?
我使用 https://github.com/shimat/opencvsharp 包装器将 opencv 与 C# 结合使用。
其实我想得到我的countours的最大边界框。
倾斜无关紧要。我想得到一个完美的直盒。
找到轮廓后我的实际结果如下所示:
这是我的代码:
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。
我有点困惑。
如果有人能给我提示就太好了。
谢谢
自己找到解决办法。
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);
完成任务:)
似乎 contours[0] 根本不是最大的等高线。你需要遍历所有的等高线,并将每个区域与一个临时的最大等高线进行比较。
我使用 https://github.com/shimat/opencvsharp 包装器将 opencv 与 C# 结合使用。
其实我想得到我的countours的最大边界框。 倾斜无关紧要。我想得到一个完美的直盒。
找到轮廓后我的实际结果如下所示:
这是我的代码:
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。 我有点困惑。
如果有人能给我提示就太好了。
谢谢
自己找到解决办法。
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);
完成任务:)
似乎 contours[0] 根本不是最大的等高线。你需要遍历所有的等高线,并将每个区域与一个临时的最大等高线进行比较。