相关疑难解决方法(0)

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仍然为null,因为屏幕保持黑色,并且我在位图之后绘制的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;
Run Code Online (Sandbox Code Playgroud)

我的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()) …
Run Code Online (Sandbox Code Playgroud)

java android opencv computer-vision background-subtraction

8
推荐指数
1
解决办法
1万
查看次数

FFmpeg 将覆盖从一个像素坐标移动到另一个像素坐标

我正在尝试在 FFmpeg 中编写一个命令,该命令将首先将一个视频流覆盖在另一个视频流之上。然后我希望叠加的视频在已知时间从一个像素坐标移动,并在稍后的时间在另一个像素坐标处结束。

我很舒服的基础知识-filter_complex,但我无法弄清楚如何申请任何算术表达式-像一个人在这里引用:https://www.ffmpeg.org/ffmpeg-utils.html#Expression-Evaluation

这是我想要完成的一个例子。

ffmpeg -i [INPUT1] -i [INPUT2] -filter_complex "[0:v][1:v]overlay=shortest=1:x=720:y=0:enable='between(t,10,20)'[overlay];...
Run Code Online (Sandbox Code Playgroud)

在这个例子中,从第 10 秒到第 20 秒,叠加层在像素坐标 720x0 处是静止的。

但是,我希望它以线性方式移动到新位置并在不同的像素坐标处结束。

例如,在 10 秒叠加期间,我希望它以 720x0 开始,然后以 1000x100 结束。

这可能吗?

video ffmpeg

3
推荐指数
1
解决办法
4191
查看次数