Vector_Point_to_Mat和Vector_Point2f_to_Mat有什么区别

时间:2019-02-08 11:52:10

标签: c# android opencv xamarin xamarin.forms

我正在使用 Xamarin.OpenCV.Droid

,我想将Point的数组转换为Mat

我知道Converters类有几种方法似乎足以进行转换。

但是,我完全不了解Vector_Point_to_MatVector_Point2f_to_Mat之间的区别。

这两个方法都将Point[]作为参数接收并返回Mat

有什么区别?

例如哪个更适合执行Imgproc.GetPerspectiveTransform

https://github.com/NAXAM/opencv-android-binding/

1 个答案:

答案 0 :(得分:1)

在C ++版本中,有基于int,int64,float和double的Point类型。

typedef Point_<int> Point2i;
typedef Point_<int64> Point2l;
typedef Point_<float> Point2f;
typedef Point_<double> Point2d;

在基于Java的OpenCV中,只有Point(基于双精度),但是Java vector_Point(| 2d | 2f)_to_Mat API会创建具有相应CvType的Mat(通过native / C ++)致电):

CvType.CV_32SC2 (vector_Point_to_Mat)
CvType.CV_32FC2 (vector_Point2f_to_Mat)
CvType.CV_64FC2 (vector_Point2d_to_Mat)

有关类型的信息:请参见:What's the difference between cvtype values in OPENCV?

public static Mat vector_Point_to_Mat(List<Point> pts) {
    return vector_Point_to_Mat(pts, CvType.CV_32S);
}

public static Mat vector_Point2f_to_Mat(List<Point> pts) {
    return vector_Point_to_Mat(pts, CvType.CV_32F);
}

public static Mat vector_Point2d_to_Mat(List<Point> pts) {
    return vector_Point_to_Mat(pts, CvType.CV_64F);
}

re:https://github.com/opencv/opencv/blob/2c6f1ab57d4250ee46e32d1b51c056431965b470/modules/java/generator/src/java/org/opencv/utils/Converters.java#L37