2012-01-10 43 views
1

我使用的OpenCV 2.2我想提出一個面具其中的行都是1到400行和0超出行。我用cv :: Mat :: ones()初始化掩碼,並想知道什麼是將行數超過400的最有效方法。我可以使用for循環,但想知道是否有更高效,更整潔的方法來執行它。有效途徑在Windows 7</p> <p>零行用的OpenCV

謝謝, 彼得。

回答

0

我知道的唯一方法是用cv::Mat::ones()創建一個400xm的矩陣和一個帶有cv::Mat::zeros()的400x(n-m)的矩陣,然後將兩者結合在一起。然而,這會產生兩個矩陣的開銷,然後重新調整大小以容納另一個矩陣。

我認爲循環顯然更有效率。無論如何,我假設它是C/C++,這就是這種特殊操作的最快方式。

+0

我目前正在循環。謝謝。 – OtagoHarbour 2012-01-13 00:22:57

6

有做多的一種方式吧:

首先,子矩陣

Mat bigImg(width, height, CV_8UC3); 
bigImg(Rect(0,0,width, height/2)) = Scalar::all(1); // upper half ones 
bigImg(Rect(0,height/2,width, height/2)) = Scalar::all(0); // lower half zeros 

或者你可以使用RowRangeColRange達到相同的效果

bigImg(rowRange, colRange) = Scalar::all(n); 

剛檢查文檔如何使用範圍

+0

它工作。非常感謝你! – OtagoHarbour 2012-01-13 00:21:26

+0

不錯!如果您對此感到滿意,請隨時接受/提出答案。 – Sam 2012-01-13 07:34:17