OpenCV(cv::mean())
cv::mean()
是 OpenCV 中用于计算图像的平均值的函数。它可以用于单通道图像、多通道图像(如彩色图像)、带掩码的图像等。
1. 函数定义
Scalar cv::mean(InputArray src, InputArray mask = noArray());
src
: 输入图像或矩阵,类型可以是多通道或单通道图像。mask
: (可选)掩码图像,它是一个8位单通道的二值图像。如果提供掩码,则只对掩码中非零的像素区域计算平均值。如果不提供掩码,函数将对整个图像计算。
返回值:
返回一个 cv::Scalar
类型的对象,其包含图像的平均值。
- 对于单通道图像,
cv::Scalar
的第一个元素就是该通道的平均值; - 对于多通道图像,每个通道的平均值分别存储在
cv::Scalar
的各个分量中。
例如:
- 对于灰度图像(单通道),返回的
cv::Scalar
是一个包含单个元素的标量,表示图像的灰度平均值。 - 对于 RGB 图像(3 通道),返回的
cv::Scalar
是一个包含三个元素的标量,分别表示 B、G、R 通道的平均值。
2. 示例
2.1 计算灰度图像的平均值
cv::Mat gray = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
cv::Scalar meanVal = cv::mean(gray);
std::cout << "Average intensity: " << meanVal[0] << std::endl;
在这个例子中,cv::mean(gray)
计算灰度图像的所有像素的平均灰度值。
2.2 计算彩色图像的每个通道的平均值
cv::Mat img = cv::imread("image.jpg");
cv::Scalar meanVal = cv::mean(img);
std::cout << "B: " << meanVal[0] << " G: " << meanVal[1] << " R: " << meanVal[2] << std::endl;
对于一个彩色图像,meanVal[0]
是蓝色通道的平均值,meanVal[1]
是绿色通道的平均值,meanVal[2]
是红色通道的平均值。
2.3 带掩码的平均值计算
cv::Mat img = cv::imread("image.jpg");
cv::Mat mask = cv::imread("mask.png", cv::IMREAD_GRAYSCALE); // 使用二值掩码
cv::Scalar meanVal = cv::mean(img, mask);
std::cout << "B: " << meanVal[0] << " G: " << meanVal[1] << " R: " << meanVal[2] << std::endl;
在这个例子中,mask
指定图像中感兴趣的区域,只有掩码为非零的像素参与平均值计算。
总结
cv::mean()
可以快速计算图像或感兴趣区域的平均值。- 对于多通道图像,返回值
cv::Scalar
的每个分量对应每个通道的平均值。 - 支持使用掩码计算平均值,以处理图像的特定区域。
通过使用 cv::mean()
,你可以方便地获取图像的全局或局部亮度信息或其他统计特性。