我使用的OpenCV 2.2我想提出一個面具其中的行都是1到400行和0超出行。我用cv :: Mat :: ones()初始化掩碼,並想知道什麼是將行數超過400的最有效方法。我可以使用for循環,但想知道是否有更高效,更整潔的方法來執行它。有效途徑在Windows 7</p> <p>零行用的OpenCV
謝謝, 彼得。
我使用的OpenCV 2.2我想提出一個面具其中的行都是1到400行和0超出行。我用cv :: Mat :: ones()初始化掩碼,並想知道什麼是將行數超過400的最有效方法。我可以使用for循環,但想知道是否有更高效,更整潔的方法來執行它。有效途徑在Windows 7</p> <p>零行用的OpenCV
謝謝, 彼得。
我知道的唯一方法是用cv::Mat::ones()
創建一個400xm的矩陣和一個帶有cv::Mat::zeros()
的400x(n-m)的矩陣,然後將兩者結合在一起。然而,這會產生兩個矩陣的開銷,然後重新調整大小以容納另一個矩陣。
我認爲循環顯然更有效率。無論如何,我假設它是C/C++,這就是這種特殊操作的最快方式。
有做多的一種方式吧:
首先,子矩陣
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
或者你可以使用RowRange
和ColRange
達到相同的效果
bigImg(rowRange, colRange) = Scalar::all(n);
剛檢查文檔如何使用範圍
它工作。非常感謝你! – OtagoHarbour 2012-01-13 00:21:26
不錯!如果您對此感到滿意,請隨時接受/提出答案。 – Sam 2012-01-13 07:34:17
我目前正在循環。謝謝。 – OtagoHarbour 2012-01-13 00:22:57