在OpenCV Core.DCT()方法上崩溃Android程序

时间:2014-02-15 17:42:23

标签: android opencv image-processing

我想写一个android程序来计算输入图像的dct,我正在使用opencv android框架。首先,我将输入图像转换为灰度,然后我想使用16 * 16块的Core.dct()来计算dct。这是dct计算部分:

int rownum = 1;
    for (int i = 1; i <= M - B + 1; i++) {
        for (int j = 1; j <= N - B + 1; j++) {
            Mat SubImg = GrayImage.submat(new Range(i, i+B-1), new Range(j, j+B-1));
            Mat Block_DCT = Mat.zeros(16, 16, SubImg.type());
            Mat Block_DCT_Quantized = Mat.zeros(16, 16, Block_DCT.type());

            Core.dct(SubImg, Block_DCT);
            Core.divide(Block_DCT, SQ16, Block_DCT_Quantized);
            Mat row = Mat.zeros(1, B*B, Block_DCT_Quantized.type());
            Block_DCT_Quantized.reshape(1, B*B);

            rownum=rownum+1;
        }
    }

我调试代码并弄清楚应用程序崩溃在Core.dct()行! 我不知道是什么问题,但我想这是因为输入类型...

任何人都可以帮助我吗?我该怎么办?

更新:

我找到了解决方案,问题是由于Mat对象的大小和类型,实际上Core.dct()方法只适用于这种类型Mat:cv_64fc1。我使用SubImg.convertTo()函数来更改类型并更正块的大小,所以它工作... 感谢Rui Marques回答...

1 个答案:

答案 0 :(得分:0)

dct需要 float 输入。

在应用dct / dft之前,您必须将图像转换为CvType.CV_32F或CvType.CV_64F