首页 > 解决方案 > 如何从向量中获取最小值和最大值2D图像的集合opencv c ++

问题描述

我想从一组灰色图像中获取min&值。max我需要将此代码转换matlabc++使用opencv.

代码是:

qGrey(1) = min(min(reff(:))); qGrey(2) = max(max(reff(:)));

reff3 D {25,171,121}25是图像的数量。我试过minMaxLoc&minMaxIdx但它只适用于一张图片。

标签: c++opencv

解决方案


要获得cv::Mat包含最大元素,您可以使用:

auto it = std::max_element(v.begin(), v.end(), [](cv::Mat a, cv::Mat b) -> bool {
    double max_a, max_b;
    cv::minMaxLoc(a, nullptr, &max_a);
    cv::minMaxLoc(b, nullptr, &max_b);
    return max_a < max_b;
});  
cv::Mat max_mat = *it; //max_element returns iterator pointing to max element 

cv::Mat要从所有s 中获取最大值,std::vector您可以使用:

double all_max = 0., all_min = 0.;
cv::minMaxLoc(vec[0], &all_min, &all_max);
for(int i=1; i<vec.size(); i++) {
    double tmp_min = 0., tmp_max = 0.;
    cv::minMaxLoc(vec[i], &tmp_min , &tmp_max);
    if(tmp_max > all_max) all_max = tmp_max;
    if(tmp_min < all_min) all_min = tmp_min;
}

推荐阅读