OpenCV -将c++上的DCT转换为Android: java.lang.IndexOutOfBoundsExcep



我正在尝试将c++ DCT代码转换为Android。下面是我试图在Android上从c++转换为OpenCV的代码。但是,我得到了这个错误:

. lang。IndexOutOfBoundsException:索引0无效,大小为0

我发现"外平面"是0。是否可以设置数组列表的大小或我错过了什么?老实说,我不是特别确定这段代码是否能工作。请告诉我该怎么做。非常感谢!

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

调用:

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

不会为您计算所有的内存——构造函数的参数只是您认为最终可能需要多少内存的一个指南。如果结果证明你需要更多也没关系;当你添加元素时,数组列表会重新调整维度,但如果你事先知道数组的大小,那么告诉它数组的大小会稍微提高性能。

因此,您仍然需要将Mats添加到数组列表中,以使通过planes.size()测量的大小增加。例如,如果我做:

    outplanes.addAll(planes);

初始化外平面后,错误就会消失。

还看这个:

在Android上获取图像的DCT (Discrete Cosine Transform)

相关内容

  • 没有找到相关文章

最新更新