Как получить максимальное значение из n размерного массива в OpenCV - PullRequest
4 голосов
/ 31 августа 2011

Я пытаюсь получить максимальное значение из 3-го мата, но minmaxIdx и mixmaxloc оба не смогли этого сделать.

int sz[] = {BIN, BIN, BIN};
Mat accumarray(3, sz, CV_8U, Scalar::all(0)) ;
double testMaxval = 0;
int minIdx = accumarray.dims ;
minMaxIdx(accumarray, NULL, &testMaxval,NULL,minIdx ,NULL) ;
cout<<testMaxval<<endl ;

Этот код не будет работать, поэтому я могу использовать max (), minmaxidx () или minmaxloc () для эффективного получения максимального значения без ручной обработки всего n-мерного массива?

Ответы [ 2 ]

6 голосов
/ 20 октября 2012

Используйте Mat () вместо NULL для Mask, или вы нарушите утверждение Mask.empty ()

Mat m;
double min, max;
int minInd, maxInd;
cv::minMaxIdx(m, &min, &max, &minInd, &maxInd, Mat());
6 голосов
/ 31 августа 2011

Следующий код работает для меня с OpenCV 2.3.1:

int sz[] = {3, 3, 3};
Mat accumarray(3, sz, CV_8U, Scalar::all(0));
accumarray.at<uchar>(0, 1, 2) = 20;
double testMaxval;
int maxIdx[3];
minMaxIdx(accumarray, 0, &testMaxval, 0, maxIdx);
cout << testMaxval << endl ;
cout << maxIdx[0] << ", " << maxIdx[1] << ", " << maxIdx[2] << endl;
...