如何在OpenCV中计算Mat的最大像素值

Tae*_*hin 7 c++ opencv

我想,这应该是显而易见的.但是我找不到简单的方法来在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;
}
Run Code Online (Sandbox Code Playgroud)

Ham*_*mer 18

您始终可以将std max_element函数与opencv中的迭代器一起使用

std::max_element(Mat.begin<double>(),Mat.end<double>());
Run Code Online (Sandbox Code Playgroud)

  • Probably worth mentioning that max_element returns an iterator. (4认同)

Dan*_* S. 14

cv::minMaxIdx使用起来非常简单.它在文档中看起来很复杂,但您可以省略大多数参数:

Mat m = ...;

double min, max;
minMaxIdx(m, &min, &max);

printf("min: %f, max: %f\n", min, max);
Run Code Online (Sandbox Code Playgroud)

而且,cv::minMaxIdx比它快10倍以上std::max_element.这是因为cv::minMaxIdx针对处理cv::Mat数据进行了优化,并且如果可能,它使用多个线程.

如果您还需要图像中最小值和最大值的位置,则可以使用cv::minMaxLoc.


小智 9

您还可以使用cv :: minMaxLoc内置函数.在你的情况下,std :: max_element更简单.