我正在寻找一种在 Android 的 openCV(2.4.3) 中覆盖图像的方法。基本上,我正在做一些图像过滤,我希望用户能够看到干净过滤的视频流,但在上角看到过滤器正在做什么的预览:
我尝试在过滤后的图像上设置 ROI,并在这样的 JNI 代码中使用 AddWeighted
在活动中:
liveFrame.copyTo(mRgba); //going to be used as the unfiltered stream
//image filtering happends here...
Rect roi = new Rect(0, 0, liveFrame.cols()/4, liveFrame.rows()/4);
mProcMat = new Mat(liveFrame, roi);
AddMats(mRgba.getNativeObjAddr(),mProcMat.getNativeObjAddr()); //will add the two, assign the result to mRgba
AddMats(本机方法):
Mat* image1=(Mat*)mat1;
Mat* image2 = (Mat*)mat2;
float alpha = 0.5;
float beta = 0.5;
addWeighted( (InputArray)*image1, alpha, (InputArray)*image2, beta, 0.0, (OutputArray)*image1);
但这不起作用,因为图像的大小必须相同,所以我似乎想不出一种方法来使它起作用。我可以在 iOS 中轻松做到这一点,因为您只需将帧应用到实时流顶部的新视图即可。据我所知,对于 Android,每个相机输入流只能有 1 个表面视图。所以这就是我在opencv中走这条路的原因,但此时我会考虑任何解决方案