2014-03-30 44 views
0

我想一个C++ DCT代码转换到Android系统。以下是我试图在Android上从C++转换为OpenCV的代码。不过,我得到这个错误:OpenCV的 - 在C++到Android转换DCT:java.lang.IndexOutOfBoundsException:无效指数0,大小为0抛出

Java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

我发现了“outplanes”为0是否可以设置ArrayList的大小还是我失去了一些东西?说实话,我不确定这个代码是否可行。请告诉我我应该做什么。非常感谢!

Mat secondImage = new Mat(); 
secondImage = image.clone(); 

List<Mat> planes = new ArrayList<Mat>(); 

Core.split(secondImage, planes); 
List<Mat> outplanes = new ArrayList<Mat>(planes.size());   
Mat trans = new Mat(CvType.CV_32FC1);   
Log.d("Planes", Integer.toString(planes.size())); //3 
Log.d("Outplanes", Integer.toString(outplanes.size())); 
for (int k = 0; k < planes.size(); k++) { 
    planes.get(k).convertTo(planes.get(k),CvType.CV_32FC1); 
    Core.dct(planes.get(k), outplanes.get(k)); 
    outplanes.get(k).convertTo(outplanes.get(k),CvType.CV_8UC1); 
} 

Core.merge(outplanes, trans); 

回答

0

召唤:

List<Mat> outplanes = new ArrayList<Mat>(planes.size()); 

不会标注你垫为你 - 参数构造函数只是一个指南,您有多少内存认为你可能最终需要。如果事实证明你需要更多,这并不重要; ArrayList会在添加项目时重新规划,但如果您事先知道这一点,则可以稍微更高效地告诉它数组的大小。

所以,你仍然需要通过planes.size测量垫添加到数组列表的大小()增加。例如,如果我这样做:

outplanes.addAll(planes); 

在您初始化outplanes后,然后错误消失。

也看看这个:

Get DCT (Discrete Cosine Transform) of image on Android

+0

谢谢。我会仔细看看的。 :) – yukilynn

相关问题