使用OpenCV实现零排的有效方法

时间:2012-01-10 02:10:15

标签: opencv mask

我在Windows 7上使用OpenCV 2.2。

我正在制作一个掩码,其中行数一直到行400,0表示除此之外的行。我使用cv :: Mat :: ones()初始化掩码,并想知道将行超过400的最有效方法是什么。我可以使用for循环但是想知道是否有更高效,更整洁的方法它

谢谢, 彼得。

2 个答案:

答案 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

或者您可以使用RowRangeColRange获得相同的效果

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

只需查看有关如何使用范围的文档

答案 1 :(得分:0)

我所知道的唯一方法是使用cv::Mat::ones()创建一个400xm的矩阵,并使用cv::Mat::zeros()创建一个400x(n-m)的矩阵,然后将两者结合在一起。然而,这有两个矩阵的开销,然后调整一个大到足以容纳另一个矩阵。

我认为循环肯定更有效率。无论如何,我认为这是C / C ++,这是这种特殊操作的最快方式。