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(),你可以方便地获取图像的全局或局部亮度信息或其他统计特性。



posted @ 2024-09-26 15:52  做梦当财神  阅读(246)  评论(0编辑  收藏  举报