两个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。
答案 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
。
希望有所帮助!