如何计算 OpenCV 中 Mat 的最大像素值
How to compute maximum pixel value of Mat in OpenCV
我想这应该是显而易见的。但是我找不到简单的方法来在OpenCV垫中的所有像素中找到最大值。当然,我可以对每种像素类型执行以下操作。但是一般的最大函数仍然有用。
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
使用起来非常简单。它在文档中看起来很复杂,但您可以省略大多数参数:
Mat m = ...;
double min, max;
minMaxIdx(m, &min, &max);
printf("min: %f, max: %fn", min, max);
而且,cv::minMaxIdx
比std::max_element
快10倍以上。这是因为cv::minMaxIdx
针对处理cv::Mat
数据进行了优化,并且如果可能,它会使用多个线程。
如果还需要图像中最小值和最大值的位置,可以使用 cv::minMaxLoc
。
你总是可以将 std max_element 函数与 opencv 的迭代器一起使用
std::max_element(Mat.begin<double>(),Mat.end<double>());
您还可以使用cv::minMaxLoc内置函数。 std::max_element 不过,在您的情况下更简单。
相关文章:
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 将 cv::Mat 转换为无符号的 int 像素
- 如何从C 中的CV :: MAT图像中有效提取某些像素
- opencv::Mat,从原始数据中获取像素值
- 访问图像像素;MatIterator_<> 和 Mat::at 运算符的比较
- 在本机中访问 MAT 像素
- (OPENCV RC1)什么导致MAT乘法比每像素乘法慢20倍
- 如何计算 OpenCV 中 Mat 的最大像素值
- 如何在 openCV 中修改 cv::Mat 的像素数据
- 使用 Mat::at<Vec3i> Point 未构造正确的像素
- 如何将像素设置为cv::Mat对象中的值
- 在OpenCV中循环通过16位Mat的像素的有效方法
- Opencv Mat的可视化像素
- 如何从Mat变量编辑/读取OpenCv中的像素值
- C++ OpenCV 函数"mat.at<Vec3b>(Point(j, i))"无法生成正确的像素值并崩溃
- 尝试设置cv::Mat的像素值时引发分段错误
- OpenCV Mat对象的奇怪像素值
- OpenCV从Mat图像中获取像素通道值
- 获取uint8 Mat的像素值
- 将cv::Scalar的值设置为opencv中cv::Mat中的一个像素的正确(最佳)方法是什么?