我在OpenCvSharp解决方案中使用C#,并且我想使用Cv2.CalibrateCamera方法来校准摄像机。要使用此功能,我需要创建一些类型为OpenCvSharp.InputOutputArray的对象。但是,似乎OpenCvSharp.InputOutputArray类没有构造函数。我也尝试了InputOutputArray.Create()方法,但是它返回了OutputArray对象。如何创建此类的实例?

最佳答案

InputOutputArrayCalibrateCamera参数是输出值cameraMatrixdistCoeffs。您可以为这些参数使用空的初始化Mat。 OpenCV将调整它们的大小并用返回值填充它们。本示例显示了语法。 (当然,您需要在调用image之前用实际数据填充objectPointsimagePointsCalibrateCamera。)

此示例将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);

关于opencv - 如何在OpenCvSharp中从InputOutputArray创建对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58918221/

10-08 21:04