C# Emgu中等高线的点矢量到点矢量的转换

C# Emgu中等高线的点矢量到点矢量的转换,c#,emgucv,C#,Emgucv,我试图用emgu 3.1找到轮廓的凸包 似乎是这样的,FindContours只接受点的向量(而不是点)。但是,convexhull需要一个点向量。我错了吗?如果我将等高线更改为VectorOfVectorOfPointF,那么在调用FindOntours时会出现运行时错误 如何将点的向量转换为点的向量? 有更好的方法吗 谢谢 using (var contours = new VectorOfVectorOfPoint()) using (Mat hierachy = new Mat()) {

我试图用emgu 3.1找到轮廓的凸包

似乎是这样的,FindContours只接受点的向量(而不是点)。但是,convexhull需要一个点向量。我错了吗?如果我将等高线更改为VectorOfVectorOfPointF,那么在调用FindOntours时会出现运行时错误

如何将点的向量转换为点的向量? 有更好的方法吗

谢谢

using (var contours = new VectorOfVectorOfPoint())
using (Mat hierachy = new Mat())
{

    CvInvoke.FindContours(img, contours, hierachy, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple, new Point());
            for (int i = 0; i < contours.Size; i++)
            {
                var contour = contours[i];
                var c = new VectorOfPointF();
                CvInvoke.ConvexHull(contour, c, false, true);
            }
使用(var等高线=点向量()的新向量)
使用(Mat层次=新Mat())
{
CvInvoke.FindContours(img、等高线、层次结构、Emgu.CV.CvEnum.RetrType.External、Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple、new Point());
对于(int i=0;i
似乎唯一的方法是从轮廓对象中的每个点向量构造点向量:

for (int i = 0; i < contours.Size; i++)
{
    var contour = contours[i];
    var vf = new PointF[vp.Size];
    for (int ii = 0; ii < contour.Size; ii++) vf[i] = new PointF(contour[ii].X, contour[ii].Y);
    VectorOfPointF vvf = new VectorOfPointF(vf);
    var c = new VectorOfPointF();
    CvInvoke.ConvexHull(vvf, c, false, true);
}
for(int i=0;i
似乎唯一的方法是从轮廓对象中的每个点向量构造点向量:

for (int i = 0; i < contours.Size; i++)
{
    var contour = contours[i];
    var vf = new PointF[vp.Size];
    for (int ii = 0; ii < contour.Size; ii++) vf[i] = new PointF(contour[ii].X, contour[ii].Y);
    VectorOfPointF vvf = new VectorOfPointF(vf);
    var c = new VectorOfPointF();
    CvInvoke.ConvexHull(vvf, c, false, true);
}
for(int i=0;i
对@Atresmo的答案稍加更新。我们可以将这一点转化为一点F:

for (int i = 0; i < contours.Size; i++)
{
    var contour = contours[i];
    var vf = new PointF[contour.Size];
    for (int ii = 0; ii < contour.Size; ii++) vf[i] = contour[ii];
    VectorOfPointF vvf = new VectorOfPointF(vf);
    var c = new VectorOfPointF();
    CvInvoke.ConvexHull(vvf, c, false, true);
}
for(int i=0;i
对@Atresmo的答案稍加更新。我们可以将这一点转化为一点F:

for (int i = 0; i < contours.Size; i++)
{
    var contour = contours[i];
    var vf = new PointF[contour.Size];
    for (int ii = 0; ii < contour.Size; ii++) vf[i] = contour[ii];
    VectorOfPointF vvf = new VectorOfPointF(vf);
    var c = new VectorOfPointF();
    CvInvoke.ConvexHull(vvf, c, false, true);
}
for(int i=0;i