OpenCV for Android:如何将Mat对象(图像)复制到另一个Mat?

时间:2011-11-27 13:57:15

标签: android opencv

两个Mat对象都包含(不同的)图像。我想将mSnapshot复制到mRgba上。 我尝试了这些(单独),但它们似乎都没有改变mRgba

mSnapshot.assignTo(mRgba);
mSnapshot.copyTo(mRgba);
mRgba = mSnapshot;

这会引发异常:

mRgba.setTo(mSnapshot);

这确实有效,并将mRgba设置为完全黑色的图像:

mRgba.setTo(new Scalar(0,0,0,255));

我错过了什么?

[编辑] 可以找到源文件和例外here

1 个答案:

答案 0 :(得分:3)

要复制图像,您应该使用clone()成员函数,如下所示:

capture.retrieve(mSnapshot, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
mRgba = mSnapshot.clone();

另外注意,OpenCV以BGR顺序存储信息;你的行:

mRgba.setTo(new Scalar(0,0,0,255));

为了清晰起见编辑:此命令将每个像素设置为(0,0,0,255),因此通道1-3设置为0,通道4(alpha)设置为255.如果你试过这个怎么办:

mRgba.setTo(new Scalar(0, 255, 0, 0)); // should be set to green.

另请注意,只有在分配矩阵后才能使用setTo

希望有所帮助!