Opencv min函数和max函数

求取 两幅图像每一个像素 较大或者较小灰度值的 max() min() 函数,这两个函数分别比较两幅图像中每一个元素灰度值的大小,保留较大(较小)的灰度值

1.max函数和min函数

void cv::max(InputArray src1,InputArray src2, OutputArray dst ) 
void cv::min(InputArray src1, InputArray src2, OutputArray dst )
  • src1:第一个图像矩阵,可以是任意通道数的矩阵。
  • src2:第二个图像矩阵,尺寸和通道数以及数据类型都需要与 src1 一致。
  • dst:保留对应位置较大(较小)灰度值后的图像矩阵,尺寸、通道数和数据类型与src1一致。
这两种函数的功能相对来说比较简单,就是比较图像每个像素的大小,按要求保留较大值或者
较小值,最后生成新的图像。例如 max() 函数,第一幅图像 ( x , y ) 位置像素值为 100 ,第二幅图像 ( x , y ) 位置像素值为 10 ,那么输出图像 ( x , y ) 位置像素值为 100

2.代码示例

#include <opencv2/opencv.hpp> 
#include <iostream> 
#include <vector> 

using namespace std; 
using namespace cv; 

int main() 
{ 
    float a[12] = { 1, 2, 3.3, 4, 5, 9, 5, 7, 8.4, 9, 10, 2 };
    float b[12] = { 1, 2.2, 3, 1, 3, 10, 6, 7, 8, 9.5, 10, 1 }; 
    Mat imga = Mat(3, 4, CV_32FC1, a); 
    Mat imgb = Mat(3, 4, CV_32FC1, b); 
    Mat imgas = Mat(2, 3, CV_32FC2, a); 
    Mat imgbs = Mat(2, 3, CV_32FC2, b); 
    double minVal, maxVal; //用于存放矩阵中的最大值和最小值
    Point minIdx, maxIdx; //用于存放矩阵中的最大值和最小值在矩阵中的位置

    //对两个单通道矩阵进行比较运算
    Mat myMax, myMin; 
    max(imga, imgb, myMax);     // max取imga和imgb中的最大值,且(imga和imgb 通道和尺寸以及类型都得一致)最后赋值给myMax
    min(imga, imgb, myMin);     // min取imga和imgb中的最小值,且(imga和imgb 通道和尺寸以及类型都得一致)最后赋值给myMix

    cout << "myMax :" << myMax  <<"\n myMin :" << myMin << endl;

    //对两个多通道矩阵进行比较运算
    Mat myMaxs, myMins; 
    max(imgas, imgbs, myMaxs); 
    min(imgas, imgbs, myMins); 

    cout << "myMaxs :" << myMaxs  <<"\n myMins :" << myMins << endl;


    //对两幅彩色图像进行比较运算
    Mat img0 = imread("../pic/hand.jpg"); 
    Mat img1 = imread("../pic/gril.jpg"); 
    if (img0.empty()|| img1.empty()) 
    { 
        cout << "请确认图像文件名称是否正确" << endl; 
        return -1; 
    } 

    resize(img0,img0,Size(300,300));
    resize(img1,img1,Size(300,300));
    imshow("img0", img0); 
    imshow("img1", img1); 
    Mat comMin, comMax; 
    max(img0, img1, comMax); 
    min(img0, img1, comMin); 
    imshow("comMin", comMin); 
    imshow("comMax", comMax); 

    waitKey(0); 
    return 0; 
}

 结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值