我想,这应该是显而易见的。但是我找不到简单的方法来在OpenCV的Mat中找到所有像素中的最大值。当然,我可以为每个像素类型执行以下操作。但一般的最大功能仍然有用。
double cvMax(cv::Mat& mat)
{
float max=0;
float* pData=(float*)mat.data;
for(int i=0;i<mat.rows;i++)
{
for(int j=0;j<mat.cols;j++)
{
float value = pData[j+i*mat.cols];
if(value>max)
{
max=value;
}
}
}
return max;
}
答案 0 :(得分:17)
您总是可以使用std max_element函数和opencv
中的迭代器std::max_element(Mat.begin<double>(),Mat.end<double>());
答案 1 :(得分:12)
cv::minMaxIdx
非常简单易用。它在文档中看起来很复杂,但您可以省略大多数参数:
Mat m = ...;
double min, max;
minMaxIdx(m, &min, &max);
printf("min: %f, max: %f\n", min, max);
此外,cv::minMaxIdx
比std::max_element
快10倍以上。这是因为cv::minMaxIdx
已针对处理cv::Mat
数据进行了优化,并且如果可能,它会使用多个线程。
如果您还需要图片中最小值和最大值的位置,则可以使用cv::minMaxLoc
。