问题描述
我正在尝试在OpenCVSharp中使用函数word
。它应该返回约{Curve}参数的lst1[sapply(lst1,word,1) %in% c("CASH","BONDS")]
(在C ++中为Cv2.ApproxpolyDP
)。此参数的类型为List<Point>
。我似乎无法做出这样的决定,而且文档很少。
似乎没有Vector<Point>
的构造函数,我也不能将其转换为OutputArray
。有人可以让我知道(最好是使用代码)如何调用OutputArray
并获得List<Point>
的roxCurve参数吗?
谢谢!
解决方法
当前版本显示“类型应与输入曲线的类型匹配”。
您应该能够将OutputArray转换为Mat,然后使用ToArray()获取点列表。
这行吗?
OutputArray output;
Cv2.ApproxPolyDP(...,output,...);
var list = output.ToMat().ToArray();
编辑:刚刚意识到ToArray()是我们编写的扩展方法。这可能会有所帮助(无需转换为CV_64F)。
public static double[,] To2DArray(this Mat mat)
{
mat.ConvertTo(mat,MatType.CV_64F);
if (mat.Rows <= 1)
{
m_Log.WarnFormat("1D Mat converted to 2D array,size={0}x{1}",mat.Rows,mat.Cols);
}
double[,] arr = new double[mat.Rows,mat.Cols];
mat.GetArray(0,arr);
return arr;
}
public static double[] ToArray(this Mat mat)
{
double[,] array2d = mat.To2DArray();
int rowCount = array2d.GetLength(0);
double[] array = new double[rowCount];
for (int i = 0; i < rowCount; i++)
{
array[i] = array2d[i,0];
}
return array;
}