我正在处理视频的帧,我想从其他帧中减去一帧以找出差异,但我不知道如何继续。我尝试将位图帧转换为垫子,然后减去它们,但它不起作用。我正在使用 opencv 2.4.3 作为 mat 函数。谁能告诉我该怎么做。如果可能的话用代码片段进行解释。
我尝试过这样的事情
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;
如果您仅从另一帧中减去一帧,则最终得到的图像将仅包含第二帧的值高于第一帧的区域。
To get 差异,你需要使用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 图像,那么您可能需要稍微增加它以解决编码噪声。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)