【问题标题】:UndistortPoints in Android OpenCV (C#) and properly forming the input matriciesAndroid OpenCV(C#)中的 UndistortPoints 并正确形成输入矩阵
【发布时间】:2017-12-14 17:22:36
【问题描述】:

为了加快我正在为 Android 平台开发的计算机视觉实时应用程序中的某些处理,我想不扭曲一些关键点,而不是整个帧。我已尽我所能遵循文档,但收到以下错误:

OpenCV 错误:断言失败 (CV_IS_MAT(_cameraMatrix) && _cameraMatrix->rows == 3 && _cameraMatrix->cols == 3) in void cvUndistortPoints(const CvMat*, CvMat*, const CvMat*, const CvMat*, const CvMat*, const CvMat*),文件 /Volumes/Linux/builds/master_pack-android/opencv/modules/imgproc/src/undistort.cpp,第 301 行

相应的文档在这里:http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#undistortpoints

在我的代码中,我分别定义和填充矩阵元素,因为它们很小。我无法找到优雅地填充 MatofPoint2f 的方法,但搜索导致我从列表转换,如下所示。

Mat camMtx = new Mat(1, 5, CvType.Cv64fc1, new Scalar(0));
Mat distCoef = new Mat(3, 3, CvType.Cv64fc1, new Scalar(0));
MatOfPoint2f uncalibpoints = new MatOfPoint2f();
MatOfPoint2f calibpoints = new MatOfPoint2f();
List<Point> points = new List<Point>();
points.Add(center); //Some previously stored point
points.Add(apex1); //Some previously stored point
points.Add(apex2); //Some previously stored point
points.Add(apex3); //Some previously stored point
uncalibpoints.FromList(points); //Convert list of points to MatofPoint2f

Console.WriteLine(uncalibpoints.Channels());
Console.WriteLine(uncalibpoints.Size());
Console.WriteLine(uncalibpoints.GetType());

//Manually setting the matrix values
distCoef.Put(0, 0, 0.51165764);
distCoef.Put(0, 1, -1.96134156);
distCoef.Put(0, 2, 0.00600294);
distCoef.Put(0, 3, 0.00643735);
distCoef.Put(0, 4, 2.59503145);
camMtx.Put(0, 0, 1551.700);
camMtx.Put(0, 1, 0.0);
camMtx.Put(0, 2, 962.237163);
camMtx.Put(1, 0, 0.0);
camMtx.Put(1, 1, 1536.170);
camMtx.Put(1, 2, 589.418432);
camMtx.Put(2, 0, 0.0);
camMtx.Put(2, 1, 0.0);
camMtx.Put(2, 2, 1.0);

Imgproc.UndistortPoints(uncalibpoints, calibpoints, camMtx, distCoef);`

【问题讨论】:

    标签: c# android opencv


    【解决方案1】:

    上述代码有两个问题:

    1. camMtx 和 distCoeff 分配中的简单错误(在复制粘贴类型错误中反转了它们的分配)

    2. Undistort Points 调用应如下所示:

      Imgproc.UndistortPoints(uncalibpoints, calibpoints, camMtx, distCoef, new Mat(), camMtx);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-05
      • 2015-02-18
      • 2012-05-01
      • 1970-01-01
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多