gpt4 book ai didi

java - 无法克隆 ArrayList 元素

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:02 26 4
gpt4 key购买 nike

我正在使用以下代码克隆我的数组:

aproximatedContours = cloneList(contours);

方法体:

public static ArrayList<MatOfPoint> cloneList(ArrayList<MatOfPoint> contours) {
ArrayList<MatOfPoint> clone = new ArrayList<MatOfPoint>(contours.size());
for(MatOfPoint item: contours)
clone.add((MatOfPoint) item.clone()); // Line 479
return clone;
}

但是,即使 contours 和 clone 都是 ArrayList 类型,而且显然它们的元素都是 MatOfPoint 类型,我还是收到以下错误:

08-16 16:34:16.015: W/System.err(21747): java.lang.ClassCastException: org.opencv.core.Mat cannot be cast to org.opencv.core.MatOfPoint
08-16 16:34:16.020: W/System.err(21747): at com.example.objecttracker.ObjectTracker.cloneList(ObjectTracker.java:469)
08-16 16:34:16.020: W/System.err(21747): at com.example.objecttracker.ObjectTracker.onCameraFrame(ObjectTracker.java:446)
08-16 16:34:16.020: W/System.err(21747): at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:387)
08-16 16:34:16.020: W/System.err(21747): at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:321)
08-16 16:34:16.025: W/System.err(21747): at java.lang.Thread.run(Thread.java:856)

有人知道这里发生了什么吗?

最佳答案

这似乎是 MatOfPoint 中的 API 错误:它从 Mat 继承了它的 clone 方法,所以当你调用它时,你会得到一个普通的 Mat 返回(并且可能只有父类(super class)的复制的字段)。 MatOfPoint 的整体语义似乎没有明确定义,并且没有复制一个的机制。

编辑:如果 native 对象句柄包含所有必要的数据,您可以使用 new MatOfPoint(Mat m) 作为复制构造函数。

关于java - 无法克隆 ArrayList<MatOfPoint> 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18268199/

26 4 0