我正在处理视频的帧,我想从其他帧中减去一帧以找出差异,但我不知道如何进行。我尝试将位图帧转换为mat,然后减去它们,但无法正常工作。我正在为垫子功能使用opencv 2.4.3。谁能告诉我该怎么做。如果可能,请使用代码段进行解释。

我尝试过这样的事情

     Bitmap myBitmap1 = BitmapFactory.decodeFile("/mnt/sdcard/Frames/mpgFrames/image001.jpg");
    Bitmap myBitmap2 = BitmapFactory.decodeFile("/mnt/sdcard/Frames/mpgFrames/image002.jpg");

    int width = myBitmap1.getWidth();
    int height = myBitmap1.getHeight();

    Mat  imgToProcess1 = new Mat(height, width, CvType.CV_8UC4);
    Mat  imgToProcess2 = new Mat(height, width, CvType.CV_8UC4);
    Mat  imgToProcess = new Mat(height, width, CvType.CV_8UC4);

    Utils.bitmapToMat(myBitmap1, imgToProcess1);
    Utils.bitmapToMat(myBitmap2, imgToProcess1);
    imgToProcess = imgToProcess1-imgToProcess2;

最佳答案

如果仅从另一帧中减去一帧,则最终将得到一幅图像,该图像仅包含第二帧的值高于第一帧的区域。

要获得差异,您需要使用absdiff:

absdiff(imgToProcess1, imgToProcess2, imgToProcess);

这将为您提供实际差异的矩阵,但是如果您想掩盖差异区域,可以对结果应用阈值:
Mat mask(imgToProcess.rows, imgToProcess.cols, CV_8U);
cvtColor(imgToProcess, mask, CV_RGB2GRAY, 1); //your conversion specifier may vary
threshold(mask, mask, 0, 255, CV_THRESH_BINARY);

最小阈值(上面的0)可以调整。如果使用的是JPEG图像,则可能需要稍微增加一点以解决编码噪声。

关于android - 如何在Android中使用opencv从另一帧减去一帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15105462/

10-10 01:50