使用Emgu CV的最新3.0版本缺少Image.FindContours方法。 (我猜这不是唯一的一个)
我在哪里可以找到它们?
更新
我想在C#
下完成相同的工作Mat edges; //from canny
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(edges, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
答案 0 :(得分:5)
是的,你是对的 - EmguCV 3.0中缺少Image.FindContours()方法。还有很多其他人甚至没有被新的CvInvoke
包装器包裹。
但是对于FindContours特定的一个,你可以使用CvInvoke静态方法包装器使用下面的代码片段: (假设imgBinary是Image对象,)
VectorOfVectorOfPoint contoursDetected = new VectorOfVectorOfPoint();
CvInvoke.FindContours(imgBinary, contoursDetected, null, Emgu.CV.CvEnum.RetrType.List, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);
然后你可以使用获得的轮廓&#34;数组&#34;例如:
contoursArray = new List<VectorOfPoint>();
int count = contoursDetected.Size;
for (int i = 0; i < count; i++)
{
using (VectorOfPoint currContour = contoursDetected[i])
{
contoursArray.Add(currContour);
}
}
请注意,CvInvoke.FindContours()
现在不会将Seq<Point>
或Contour<Point>
结构返回到已检测到的轮廓中,而是VectorOfVectorOfPoint
实际上是Point[][]
。< / p>