我正在使用适用于 Android 版本 3.1.0 的 OpenCV。我尝试使用 AKAZE 检测器和 AKAZE 描述符。当我在模拟器上运行代码时出现以下错误。
OpenCV Error: Assertion failed (scn + 1 == m.cols) in void CV:perspectiveTransform(cv::InputArray, cv::OutputArray, cv::InputArray),
file/Volumes/Linux/builds/master_pack-android/opencv/modules/core/src/matmul.cpp, line 2125
core::perspectiveTransform_10() caught cv::Exception: /Volumes/Linux/builds/master_pack-android/opencv/modules/core/src/matmul.cpp:2125:
error: (-215) scn + 1 == m.cols in function void CV:perspectiveTransform(cv::InputArray, cv::OutputArray, cv::InputArray)
我正在使用
private final Mat firstCorners = new Mat(4,1, CvType.CV_32FC2)
private final Mat secondCorners = new Mat(4,1, CvType.CV_32FC2)
final Mat homography = Calib3d.findHomography(first, second, Calib3d.RANSAC, 1)
Core.perspectiveTransform(firstCorners, secondCorners, homography)
我尝试了 new Mat(4,1, CvType.CV_32FC1) 但没有用
对此有何帮助。
我遇到了同样的错误,并且能够使用
MatOfPoint2f
修复它 - 这是 Kotlin 中的代码:
val dstPtsCoords = MatOfPoint2f()
val srcPtsCoords = MatOfPoint2f()
dstPtsCoords.fromList(dstPointArray) // Array from matches
srcPtsCoords.fromList(srcPointArray) // Array from matches
val H = Calib3d.findHomography(srcPtsCoords, dstPtsCoords, Calib3d.RANSAC, 1)
val undistortedReferencePoints = MatOfPoint2f()
undistortedReferencePoints.fromArray(
Point(0.0, 0.0),
Point(reference_width - 1.0, 0.0),
Point(reference_width - 1.0, reference_height - 1.0),
Point(0.0, reference_height - 1.0)
)
val dstPoints = MatOfPoint2f() // top left, bottom left, bottom right, top right
perspectiveTransform(undistortedReferencePoints, dstPoints, H)