C# 如何在图像中找到图像?
如何在图像中找到图像 现在我正在使用EmguCV,并根据本教程编写了以下代码: 第一步 步骤2 步骤3 这是我迄今为止最好的结果,但它并不完美,因为我仍然需要一些边来创建图像周围的所有边界框 步骤4 我想要的是找到图像中每个图像的所有边缘,这样我就可以制作出完美的边界框。 我对EmguCV/OpenCV还不熟悉,但我仍然认为我最好的选择是使用这个库来解决这个问题。C# 如何在图像中找到图像?,c#,emgucv,C#,Emgucv,如何在图像中找到图像 现在我正在使用EmguCV,并根据本教程编写了以下代码: 第一步 步骤2 步骤3 这是我迄今为止最好的结果,但它并不完美,因为我仍然需要一些边来创建图像周围的所有边界框 步骤4 我想要的是找到图像中每个图像的所有边缘,这样我就可以制作出完美的边界框。 我对EmguCV/OpenCV还不熟悉,但我仍然认为我最好的选择是使用这个库来解决这个问题。 我只需要找到正确的工具并正确使用它们,这就是我希望这里的人能帮助我的:)以下是您可以做的: 加载图像 反转-img.Not
我只需要找到正确的工具并正确使用它们,这就是我希望这里的人能帮助我的:)以下是您可以做的:
- 加载图像
- 反转-
img.Not()
- 转换为灰度-
img.Convert()
- 执行二进制阈值处理-
img.Convert().ThresholdBinary(新灰色(54)、新灰色(255))
- 获取凸包和边界框。执行过滤,以便获得符合条件的对象。可以使用轮廓面积、周长等
var Contours = new List<Contour<Point>>(); for (Contour<Point> contours = _gray.FindContours( HAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, RETR_TYPE.CV_RETR_EXTERNAL); contours != null; contours = contours.HNext) { Seq<Point> pts = contours.GetConvexHull(ORIENTATION.CV_CLOCKWISE); double diff = Math.Round(Math.Abs(pts.Area - contours.Area) / pts.Area, 2); //additional constraint double q = contours.Area / contours.Perimeter; //bounding box of the counter Rectangle rect = contours.BoundingRectangle; //customize the value to suit your need if (contours.BoundingRectangle.Height > 5 && contours.BoundingRectangle.Width > 5) { Contours.Add(contours); } }
var等高线=新列表(); 对于(等高线=_gray.FindContours( HAIN_近似法。CV_链近似法(简单,翻新类型。CV_翻新外部); 等高线!=null;等高线=等高线.HNext) { Seq pts=等高线GetConvxhull(方向为顺时针); 双差=数学圆(数学绝对值(点面积-轮廓面积)/ 临时秘书处区域,2); //附加约束 双q=等高线。面积/等高线。周长; //计数器的边界框 矩形矩形=等高线。边框矩形; //定制价值以满足您的需要 如果(等高线.BoundingRectangle.Height>5&& 轮廓.BoundingRectangle.Width>5) { 等高线。添加(等高线); } }
- 使用
轮廓执行所需操作(例如,填充并用作遮罩以提取每个图像、绘制边界框等)
var Contours = new List<Contour<Point>>();
for (Contour<Point> contours = _gray.FindContours(
HAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, RETR_TYPE.CV_RETR_EXTERNAL);
contours != null; contours = contours.HNext)
{
Seq<Point> pts = contours.GetConvexHull(ORIENTATION.CV_CLOCKWISE);
double diff = Math.Round(Math.Abs(pts.Area - contours.Area) /
pts.Area, 2);
//additional constraint
double q = contours.Area / contours.Perimeter;
//bounding box of the counter
Rectangle rect = contours.BoundingRectangle;
//customize the value to suit your need
if (contours.BoundingRectangle.Height > 5 &&
contours.BoundingRectangle.Width > 5)
{
Contours.Add(contours);
}
}