2016-01-21 60 views
0

我有兩個(相同的大小,相同的類型)cv:Mat的讓我們打電話給他們A,B。我也有另一個cv::Mat這是一個面具(0和1的值或任何,0和255也適用)讓我們稱之爲M構造從兩個cv ::墊和一個面具cv ::墊

我需要構造一個新cv::MatÇ)具有的相同類型和尺寸。在Çcv::Mat的值是如下:

C(x,y) = A(x,y) if M(x,y)==1 
C(x,y) = B(x,y) if M(x,y)==0 

簡單的解決方案我現在正在做的是遍歷中號和分支其價值和分配給ç正確的值。但是,有沒有更好的方法?準備好並從OpenCV優化一個?

回答

2

我建議你做的兩個步驟:

cv::Mat C(A.rows, A.cols, A.type()); 
// copy A in C where M != 0 
A.copyTo(C, M); 
// copy B in C where M == 0 
B.copyTo(C, 255 - M); 

編輯:

擁有Micka指出了更好的性能

// start from B 
cv::Mat C = B.clone(); 

// copy B in C where M == 0 
A.copyTo(C, M); 
+1

這應該是最簡單和最可讀解決方案但是,不知道是否手動循環覆蓋整個掩膜更快。 MIght取決於圖像大小,構建設置等。也許重要的是要注意,OpenCV掩碼只會在0和非0之間決定,因此C將填充A中的所有內容,其中M不爲0,因此無論它是1,25,103或它們的混合物。 – Micka