OpenCV lower () Массив к векторному среднему - PullRequest
0 голосов
/ 03 мая 2018

Использование OpenCV 3.4.1 в C ++ У меня есть объект двумерного массива Mat. Эти первые несколько строк просто объясняют, как в основном получаются данные для заполнения этого объекта Mat ("dat")

int rows=NUMBER_OF_ROWS;
int cols=NUMBER_OF_COLS;
float* rawdata;
rawdata = new float[rows*cols];
fits_read_img(FP, TFLOAT, firstpixel, npixels, &nullval, rawdata, &anynull, &status);

Тогда создание объекта Mat из необработанных данных выглядит так:

cv::Mat dat = cv::Mat(rows, cols, CV_32FC1, rawdata);

Пока все хорошо, и я использовал этот объект "dat" для многих вещей. Но теперь я хочу создать среднее число данных. Это должно дать мне вектор x 1 строк, где каждый столбец каждой строки сведен в одно значение, среднее значение всех значений в этой строке. Примерно так:

Так что OpenCV имеет функцию Reduce (). Вот как я пытался это назвать:

std::vector<float> vec(rows);
cv::reduce(dat, vec, 1, cv::REDUCE_AVG, CV_32FC1);

который segfaults. Если я пойду в другом направлении, I.E.

cv::reduce(dat, vec, 0, cv::REDUCE_AVG, CV_32FC1);

тогда я получаю вектор 1 x cols, содержащий среднее по столбцу. Фактически, это дает мне точный эквивалент этого:

int r, c;
float sum;
for (c=0; c<cols; c++) {
  sum=0;
  for (r=0; r<rows; r++) {
    sum += dat.at<float>(r,c);
  }
  std::cout << "sum=" << ss << " avg=" << ss/r << std::endl;
}

Так что я, конечно, мог бы использовать такой метод грубой силы, чтобы получить желаемое среднее значение по строке, но, похоже, я должен иметь возможность получить его одним вызовом cv :: redu ().

Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...