2012-10-28 147 views
1

在opencv 2.4中有沒有解決方案,它將非const引用返回到一個子Mat?
我問這個,因爲我想在適當位置覆蓋子圖像,由ROI定義, 但mat(roi)返回一個const引用,所以我不能寫說mat(roi)=mat2, 或cv::rectangle(mat(roi), rect_relative_to_roi)如何覆蓋opencv Mat的子圖像?

編輯:如果我已經定義複雜的繪圖功能,這對一個子圖像的工作(我會更具體的使用安德烈的回答)


是我能避免發送相對座標繪圖功能的唯一途徑,
我複製了我想要使用的子圖像?

我的意思是這樣的:

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

回答

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()). 
5

你可以做

mat2.copyTo(mat(roi)); 
+0

這是不行的,對不起 –