两个图像像素比较操作
min()
void cv::min(InputArray src1,
InputArray src2,
OutputArray dst
)
max()
void cv::max(InputArray src1,
InputArray src2,
OutputArray dst
)
·src1:第一个图像矩阵,可以是任意通道数的矩阵。
·src2:第二个图像矩阵,尺寸和通道数以及数据类型都需要与src1一致。
·dst:保留对应位置较大(较小)灰度值后的图像矩阵,尺寸,通道数和数据类型与src1一致。
作用:如果想保留原始图像种,小于3的值,将大于等于3的数字和都是3的矩阵进行比较,取较小值。
图像最大值与最小值寻找
minMaxLoc()
void cv::minMaxLoc(InputArray src,
double* minVal,
double* maxVal = 0,
Point* minLoc = 0,
Point* maxLoc = 0,
InputArray mask = noArray()
)
·src:输入单通道矩阵。
·minVal:指向最小值的指针,如果不需要,则使用NULL。
·maxVal:指向最大值的指针,如果不需要,则使用NULL。
·minLoc:指向最小位置的指针,如果不需要,则使用NULL。
·maxLoc:指向最大位置的指针,如果不需要,则使用NULL。
·mask:掩码矩阵,用于标记寻找上述四个值的范围,参数默认值为noArray(),表示寻找范围是矩阵所有数据。
示例
注意:要比较的图片大小格式必须一致,否则报错。
int main()
{
Mat img = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/lenac.png"); //0-255
Mat white = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/mask_white.png");
Mat black = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/mask_black.png");
Mat Min, Max;
min(img,white, Min);
max(img,black, Max);
return 0;
}
结果
示例2
把光标放在&xxxx上即可看到最大值最小值,坐标的数值
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv; //opencv的命名空间
using namespace std;
int main()
{
Mat img = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/lenac.png"); //0-255
Mat white = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/mask_white.png");
Mat black = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/mask_black.png");
Mat Min, Max;
min(img,white, Min);
max(img,black, Max);
//比较最大值和最小值函数只能输入单通道矩阵,因此我们将彩色图片转换为灰度图片单通道
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
double minVal, maxVal;
Point minLoc, maxLoc;
minMaxLoc(gray, &minVal, &maxVal, &minLoc, &maxLoc);
return 0;
}