跨活动,OpenCV,Android </mat>访问ArrayList <mat>

时间:2013-11-15 23:10:49

标签: java android opencv

我试图在两个不同的活动中使用ArrayList()。宣布:

public static ArrayList<Mat> Video = new ArrayList<Mat>();

我从相机读取帧,当我有50帧时,我会进入下一个活动。

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {

    Mat frame = inputFrame.rgba();

    if(Video.size() < 50)
    {
        Log.i(TAG, "Added frame");
        Video.add(frame);
    }
    else
    {           
        String e = Integer.toString(Video.get(1).cols());
        Log.v(TAG1, e);
        e = Integer.toString(Video.get(1).rows());
        Log.v(TAG1, e);

        Intent intent = new Intent(this, Analysis.class);
        startActivity(intent);
    }

    return inputFrame.rgba();

}

此方法的日志输出为:

11-15 22:53:30.225: V/Values(32362): 800
11-15 22:53:30.225: V/Values(32362): 480

这是正在运行的设备(Galaxy S2)的正确高度和宽度。

然后在我的下一个活动onCreate()中,我直接访问“视频”:

String e = Integer.toString(HomeScreen.Video.get(1).cols());
Log.v(TAG, e);
String h = Integer.toString(HomeScreen.Video.get(1).rows());
Log.v(TAG, h);

但这次日志上写着:

11-15 22:53:30.840: V/Values2:(32362): 800
11-15 22:53:30.840: V/Values2:(32362): 0

所以我的问题是,为什么两个日志中的row()值都不是480?我需要一个帧列表,因为我正在记录所有帧,然后在另一个Activity中我将对它们进行操作并输出显示(我需要行数)。

1 个答案:

答案 0 :(得分:1)

我换了一行:

Video.add(frame);

使用

Video.add(frame.clone());

它完美无缺!

我认为在顶线我只复制了帧的标题部分而不是整个帧的内容。