Эффективный путь к нулевым рядам с OpenCV - PullRequest
1 голос
/ 10 января 2012

Я использую OpenCV 2.2 в Windows 7.

Я делаю маску, в которой все строки - от 1 до 400 и 0 для строк, выходящих за рамки этого.Я инициализировал маску с помощью cv :: Mat :: ones (), и мне было интересно, что будет наиболее эффективным способом обнуления строк за пределами 400. Я мог бы использовать для циклов, но мне было интересно, есть ли более эффективный, более аккуратный способ сделатьэто.

Спасибо, Питер.

Ответы [ 2 ]

6 голосов
/ 10 января 2012

Существует более одного способа сделать это:

Сначала подматрицы

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);

Просто проверьте документы о том, как использовать диапазоны

0 голосов
/ 10 января 2012

Единственный известный мне способ - создать матрицу 400xm с cv::Mat::ones() и матрицу 400x (n-m) с cv::Mat::zeros(), а затем соединить их вместе. Однако это требует дополнительных усилий для создания двух матриц, а затем изменения размера одной, чтобы она была достаточно большой, чтобы вместить другую.

Я думаю, что зацикливание определенно более эффективно. Во всяком случае, это C / C ++, и это самый быстрый способ для такого рода операций.

...