gpt4 book ai didi

android - Opencv4Android getPerspectiveTransform错误

转载 作者:行者123 更新时间:2023-12-02 17:41:17 25 4
gpt4 key购买 nike

我想使用getPerspectiveTransform函数,但是它只接受Mat作为参数,并且我在数组中有坐标数据。所以我将它们转换为点,然后转换为Mat,如下所示:

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,但是他没有收到此错误,因此我将其发布在这里。

最佳答案

正如在OP帖子的评论讨论中提到的(所有功劳都归功于他们),问题在于l列表:

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);

如果我们看一下 List<Point> l的内容:
for (Point pt : l)
System.out.println("(" + pt.x + ", " + p.ty + ")");

(x0, y0)
(x1, y1)
(x2, y2)
(x3, y3)

然后转到下一个矩阵:
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);

再看 List<Point> l的内容:
for (Point pt : l)
System.out.println("(" + pt.x + ", " + p.ty + ")");

(x4, y4)
(x5, y5)
(x6, y6)
(x7, y7)
(x0, y0)
(x1, y1)
(x2, y2)
(x3, y3)

因此,这是罪魁祸首。您的第二个矩阵将有8个点。

Java docs for ArrayList :

Parameters: index - index at which the specified element is to be inserted



使用 l.add将插入而不覆盖旧列表。因此解决方案将是为每个转换矩阵创建一个新列表。

关于android - Opencv4Android getPerspectiveTransform错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44642398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com