我在Windows 7上使用OpenCV 2.2。
我正在制作一个掩码,其中行数一直到行400,0表示除此之外的行。我使用cv :: Mat :: ones()初始化掩码,并想知道将行超过400的最有效方法是什么。我可以使用for循环但是想知道是否有更高效,更整洁的方法它
谢谢, 彼得。
答案 0 :(得分: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
或者您可以使用RowRange
和ColRange
获得相同的效果
bigImg(rowRange, colRange) = Scalar::all(n);
只需查看有关如何使用范围的文档
答案 1 :(得分:0)
我所知道的唯一方法是使用cv::Mat::ones()
创建一个400xm的矩阵,并使用cv::Mat::zeros()
创建一个400x(n-m)的矩阵,然后将两者结合在一起。然而,这有两个矩阵的开销,然后调整一个大到足以容纳另一个矩阵。
我认为循环肯定更有效率。无论如何,我认为这是C / C ++,这是这种特殊操作的最快方式。