我想,这应该是显而易见的。但我找不到简单的方法来找到 OpenCV Mat 中所有像素中的最大值。当然,我可以对每种像素类型执行以下操作。但一般的 max 函数仍然有用。
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;
}
cv::minMaxIdx http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#minmaxidx使用起来真的很简单。它在文档中看起来很复杂,但您可以省略大部分参数:
Mat m = ...;
double min, max;
minMaxIdx(m, &min, &max);
printf("min: %f, max: %f\n", min, max);
而且,cv::minMaxIdx
比速度快 10 倍以上std::max_element
。这是因为cv::minMaxIdx
针对操作进行了优化cv::Mat
数据,如果可能的话它使用多个线程。
如果您还需要图像中最小值和最大值的位置,您可以使用cv::minMaxLoc http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#minmaxloc.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)