求取
两幅图像每一个像素
较大或者较小灰度值的
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;
}
结果: