1.详细解释 minMaxLoc 函数
minMaxLoc 是 OpenCV 中的一个函数,用于查找矩阵或图像中的最小值和最大值,以及它们各自的位置。函数原型如下:
void minMaxLoc(InputArray src, double* minVal, double* maxVal, Point* minLoc = 0, Point* maxLoc = 0, InputArray mask = noArray());
- src:输入的矩阵或图像。
- minVal:指向存储最小值的指针。
- maxVal:指向存储最大值的指针。
- minLoc:指向存储最小值位置的指针(可选)。
- maxLoc:指向存储最大值位置的指针(可选)。
- mask:可选的操作掩码,指定要考虑的元素(默认为不使用掩码)。
举例:
// 最大最小值
double min_val;
double max_val;
Point minloc;
Point maxloc;
minMaxLoc(src, &min_val, &max_val, &minloc, &maxloc);
printf("min:%.2f, max: %.2f\n", min_val, max_val);
- src:输入的矩阵或图像。
- &min_val:指向 min_val 的指针,用于存储最小值。
- &max_val:指向 max_val 的指针,用于存储最大值。
- &minloc:指向 minloc 的指针,用于存储最小值的位置。
- &maxloc:指向 maxloc 的指针,用于存储最大值的位置。
minMaxLoc 函数会遍历整个矩阵或图像,找到最小值和最大值,并记录它们的位置。
2.像素值统计信息:
// 像素值统计信息
vector<int> hist(256);
for (int i = 0; i < 256; i++) {
hist[i] = 0;
}
for (int row = 0; row < h; row++) {
for (int col = 0; col < w; col++) {
int pv = src.at<uchar>(row, col);
hist[pv]++;
}
}
hist[pv]++详解:
- hist 是一个大小为 256 的向量,每个元素初始化为 0。
- pv 是当前像素的灰度值,范围是 0 到 255。
- hist[pv]++ 表示将 hist 向量中索引为 pv 的元素加 1。
- 这一步的作用是统计灰度值为 pv 的像素出现的次数。
假设有一个 3x3 的灰度图像 src:
cv::Mat src = (cv::Mat_<uchar>(3, 3) << 0, 1, 2,
1, 2, 3,
2, 3, 4);
. 结果:
- hist[0] = 1(灰度级别 0 出现 1 次)
- hist[1] = 2(灰度级别 1 出现 2 次)
- hist[2] = 3(灰度级别 2 出现 3 次)
- hist[3] = 2(灰度级别 3 出现 2 次)
- hist[4] = 1(灰度级别 4 出现 1 次)
int pv = src.at<uchar>(row, col)详解:
- src.at<uchar>(row, col) 获取图像在 (row, col) 位置的像素值。
- uchar 表示无符号字符类型(unsigned char),适用于灰度图像的像素值(0 到 255)。
- pv 是当前像素的灰度值。