如何覆盖opencv Mat的子图像?

时间:2012-10-28 11:59:03

标签: c++ opencv

opencv 2.4中是否有任何解决方案将非const引用返回到子Mat?
我问这个是因为我想覆盖一个由roi定义的子图像, 但是mat(roi)返回一个const引用,所以我不能写出mat(roi)=mat2, 或cv::rectangle(mat(roi), rect_relative_to_roi)

编辑:(我会更具体地使用Andrej的回答)

如果我定义了适用于子图像的复杂绘图函数,则 是我可以避免向绘图函数发送相对坐标的唯一方法,
我来回复制我想要使用的子图像?

我是这样的意思:

/* Mat canvas; */
Mat subimg = canvas(roi);
draw_sth(subimg);
subimg.copyTo(canvas(roi));

2 个答案:

答案 0 :(得分:5)

你可以做到

mat2.copyTo(mat(roi));

答案 1 :(得分:2)

嗯,事实证明

Mat subcanvas = canvas(roi);
draw_sth(subcanvas);

是答案,它将修改原始画布,因为Mat将被视为引用计数的智能指针,它们只是指向图像数据。

另一方面,copyTo()并不好。看一下opencv代码:

//! copies the matrix content to "m".
// It calls m.create(this->size(), this->type()).