如何在 OpenCvSharp 中从 InputOutputArray 创建对象?

How to create an object from InputOutputArray in OpenCvSharp?

我在 C# 解决方案中使用 OpenCvSharp,我想使用 Cv2.CalibrateCamera 方法校准相机。要使用此功能,我需要创建一些 OpenCvSharp.InputOutputArray 类型的对象。但是,class OpenCvSharp.InputOutputArray 似乎没有构造函数。我也试过 InputOutputArray.Create() 方法,但它 returns 一个 OutputArray 对象。如何创建此 class 的实例?

CalibrateCameraInputOutputArray 参数是输出值 cameraMatrixdistCoeffs。您可以为这些参数使用空的已初始化 Mat。 OpenCV 将调整它们的大小并用 return 值填充它们。此示例显示语法。 (当然,在调用 CalibrateCamera 之前,您需要用真实数据填充 imageobjectPointsimagePoints。)

此示例将 List<Mat> 用于 objectPointsimagePoints,但它们可以是实现 IEnumerable 的任何集合类型(例如 Mat[])。

Mat image;
List<Mat> objectPoints; // input to CalibrateCamera
List<Mat> imagePoints; // input to CalibrateCamera
Mat cameraMatrix = new Mat(); // output from CalibrateCamera
Mat distCoeffs = new Mat(); // output from CalibrateCamera
Mat[] rvecs; // output from CalibrateCamera
Mat[] tvecs; // output from CalibrateCamera
CalibrationFlags flags = CalibrationFlags.FixAspectRatio;

//Populate image, objectPoints, and imagePoints with real data before calling CalibrateCamera

Cv2.CalibrateCamera(objectPoints, imagePoints, image.Size(), cameraMatrix, distCoeffs, out rvecs, out tvecs, flags);