我想使用getPerspectiveTransform函数,但它只接受Mat作为参数,并且我有一个数组中的坐标数据。所以,我将它们转换成分数,然后垫上如下:Opencv4Android getPerspectiveTransform错误
List<Point> l = new ArrayList<Point>();
for (int i = 0; i < pts_1.length; i++) {
Point pt = new Point(pts_1[0][i], pts_1[1][i]);
l.add(i,pt);
}
Mat mat1 = Converters.vector_Point2f_to_Mat(l);
for (int i = 0; i < pts_2.length; i++) {
Point pt = new Point(pts_2[0][i], pts_2[1][i]);
l.add(i,pt);
}
Mat mat2 = Converters.vector_Point2f_to_Mat(l);
Mat perspectiveTransform = Imgproc.getPerspectiveTransform(mat1,mat2);
但是当我运行我的应用程序,那么它给了我错误“出事了”,并在logcat中我收到以下错误:
E/cv::error(): OpenCV Error: Assertion failed (src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV_32F) == 4) in cv::Mat cv::getPerspectiveTransform(cv::InputArray, cv::InputArray), file /build/master_pack-android/opencv/modules/imgproc/src/imgwarp.cpp, line 6748
E/org.opencv.imgproc: imgproc::getPerspectiveTransform_10() caught cv::Exception: /build/master_pack-android/opencv/modules/imgproc/src/imgwarp.cpp:6748: error: (-215) src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV_32F) == 4 in function cv::Mat cv::getPerspectiveTransform(cv::InputArray, cv::InputArray)
我是OpenCV4Android的新手,所以我不明白为什么会发生这种情况。如何解决它?有没有其他更好的方法来做到这一点?
感谢您的帮助!
注意:我知道这里有一个类似的程序:Can't get OpenCV's warpPerspective to work on Android但他没有得到这个错误,所以我在这里发布它。
@AlexanderReynolds我没有得到你,但我的Android工作室告诉我'Imgproc.getPerspectiveTransform(Mat src,Mat dst)'的格式为 – Ank
对不起---不习惯Java的实现。我懂了。你有四点? 'getPerspectiveTransform'恰好使用四点。如果你有四个以上的点,你应该使用'findHomography()'。 –
@AlexanderReynolds yup正好四点 – Ank