我正在使用 Xamarin.OpenCV.Droid ,
而且我想将Point
的数组转换为Mat
。
我知道Converters
类具有几种似乎足以进行转换的方法。
但是,我完全不了解Vector_Point_to_Mat
和Vector_Point2f_to_Mat
之间的区别。
这两种方法都将Point[]
作为arg接收并返回Mat
。
有什么不同?
例如,哪个更适合执行Imgproc.GetPerspectiveTransform
?
https://github.com/NAXAM/opencv-android-binding/
最佳答案
在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
(基于double的),但是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);
}
回复:https://github.com/opencv/opencv/blob/2c6f1ab57d4250ee46e32d1b51c056431965b470/modules/java/generator/src/java/org/opencv/utils/Converters.java#L37