opencv去文字背景Android,OpenCV Android背景扣除

我正在使用Android手机作为主要处理器并使用摄像头检测运动的机器人项目。我从OpenCV获得了Android二进制包并正确安装它。我可以使用OpenCV本机相机捕获图像并将其显示在屏幕上。我在使用背景减法类时遇到问题。我可以在构造函数中创建一个新的BackgroundSubtractorMOG对象,但是当我尝试运行下面的代码时,它强制退出了,我从本地代码中收到错误“

BackgroundSubtractorMOG仅支持1通道和3通道8位图像”。我尝试将Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA更改为Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGB,然后它没有强制退出,但我得到的只是一个黑屏。我非常确定FRAME_RGB的bmp仍然为空,因为屏幕保持黑色,并且在位图之后(为清晰起见和作为故障排除步骤从下面发布的代码中删除了),我正在绘制的fps计数器没有显示。

我查看了此函数的OpenCV C

++代码(此处为388行),如果图像类型不是CV_8UC1或CV_8UC3,则会发生图像类型错误,因此我尝试使用java

CvType.CV_8UC3而不是Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA

capture.retrieve(),但是它强制关闭,并且出现“不支持输出帧格式”错误。

我想我只是遇到类型转换问题,但是我无法终生弄清OpenCV的Android专用图像类型是否与记录的常规图像类型相匹配。任何帮助,将不胜感激。

变量:

private SurfaceHolder mHolder;

private VideoCapture mCamera;

private Mat mRgba;

private Mat mFGMask;

private BackgroundSubtractorMOG mBGSub;

我的SurfaceView的run()函数:

public void run() {

Bitmap bmp = null;

synchronized (this) {

if (mCamera == null)

break;

if (!mCamera.grab()) {

Log.e(TAG, "mCamera.grab() failed");

break;

}

processFrame(mCamera);

bmp = Bitmap.createBitmap(mFGMask.cols(), mFGMask.rows(), Bitmap.Config.ARGB_8888);

Utils.matToBitmap(mFGMask, bmp);

}

if (bmp != null) {

Canvas canvas = mHolder.lockCanvas();

if (canvas != null) {

canvas.drawBitmap(bmp, (canvas.getWidth() - bmp.getWidth()) / 2, (canvas.getHeight() - bmp.getHeight()) / 2, null);

mHolder.unlockCanvasAndPost(canvas);

}

bmp.recycle();

}

}

在run()中引用的processFrame()函数:

protected void processFrame(VideoCapture capture) {

capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);

mBGSub.apply(mRgba, mFGMask);

}

编辑:

最终起作用的解决方案:

protected void processFrame(VideoCapture capture) {

capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGB);

//GREY_FRAME also works and exhibits better performance

//capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_GREY_FRAME);

mBGSub.apply(mRgba, mFGMask, 0.1);

Imgproc.cvtColor(mFGMask, mRgba, Imgproc.COLOR_GRAY2BGRA, 4);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值