如何在Android中使用opencv从另一帧减去一帧

如何在Android中使用opencv从另一帧减去一帧,第1张

概述我正在处理视频的帧,我想从其他帧中减去一帧以找出差异,但我不知道如何进行.我尝试将位图帧转换为mat,然后减去它们,但无法正常工作.我正在使用opencv2.4.3实现mat功能.谁能告诉我该怎么做.如果可能,请使用代码段进行解释.我尝试过这样的事情BitmapmyBitmap1=BitmapFac

我正在处理视频的帧,我想从其他帧中减去一帧以找出差异,但我不知道如何进行.我尝试将位图帧转换为mat,然后减去它们,但无法正常工作.我正在使用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;

解决方法:

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

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

absdiff(imgtoprocess1, imgtoprocess2, imgtoprocess);

这将为您提供实际差异的矩阵,但是如果您想掩盖差异区域,可以对结果应用阈值:

Mat mask(imgtoprocess.rows, imgtoprocess.cols, CV_8U);cvtcolor(imgtoprocess, mask, CV_RGB2GRAY, 1); //your conversion specifIEr may varythreshold(mask, mask, 0, 255, CV_THRESH_BINARY);

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

总结

以上是内存溢出为你收集整理的如何在Android中使用opencv从另一帧减去一帧全部内容,希望文章能够帮你解决如何在Android中使用opencv从另一帧减去一帧所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1087156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存