public virtual void Compute(IEnumerable<Mat> images, ref KeyPoint[][] keypoints, IEnumerable<Mat> descriptors)
{
if (disposed)
throw new ObjectDisposedException(GetType().Name);
if (images == null)
throw new ArgumentNullException(nameof(images));
if (descriptors == null)
throw new ArgumentNullException(nameof(descriptors));
IntPtr[] imagesPtrs = EnumerableEx.SelectPtrs(images);
IntPtr[] descriptorsPtrs = EnumerableEx.SelectPtrs(descriptors);
using (var keypointsVec = new VectorOfVectorKeyPoint(keypoints))
{
NativeMethods.features2d_Feature2D_compute2(
ptr, imagesPtrs, imagesPtrs.Length, keypointsVec.CvPtr,
descriptorsPtrs, descriptorsPtrs.Length);
keypoints = keypointsVec.ToArray();
}
}