如何从OpenCV中的n维数组中获取最大值

时间:2011-08-31 07:00:51

标签: c++ opencv multidimensional-array max

我试图从3-d Mat获得最大值,但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 个答案:

答案 0 :(得分:6)

以下代码适用于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;

答案 1 :(得分:6)

对Mask使用Mat()而不是NULL,或者你将修改一个断言Mask.empty()

Mat m;
double min, max;
int minInd, maxInd;
cv::minMaxIdx(m, &min, &max, &minInd, &maxInd, Mat());