mean 只求均值,输入Mat,返回Scalar,相比 meanStdDev速度更快。
meanStdDev同时求取均值和方差,速度慢一点。第一个参数是Mat类图片,第二个参数是存放计算好的各通道均值,为一个Mat。
第三个参数是存放计算好的各通道标准差,也为一个Mat。
例1:
#include <stdio.h>
#include <opencv2/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar)
#include <opencv2/imgproc.hpp> // Gaussian Blur
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <string>
using namespace std;
using namespace cv;
int main()
{
Mat image = imread("mark_1.jpg");
if (image.data == 0)
{
cout << "发生读取错误" << endl;
}
DWORD start1 = ::GetTickCount64();//计时器1
cv:Scalar tempVal;
for (int i = 0; i < 200; i++)
{
tempVal = cv::mean(image);
}
printf("mean B通道均值为:%lf G通道均值为:%f R通道均值为:%f \n", tempVal.val[0], tempVal.val[1], tempVal.val[2]);
DWORD end1 = ::GetTickCount64();
cout << "mean图片处理用时:" << (end1 - start1) << "ms\n";
DWORD start2 = ::GetTickCount64();//计时器2
Mat mean, stddev;
for (int i = 0; i < 200; i++)
{
meanStdDev(image, mean, stddev);
}
printf("B通道均值为:%lf G通道均值为:%lf R通道均值为:%lf \n", mean.at<double>(0, 0), mean.at<double>(1, 0), mean.at<double>(2, 0));
DWORD end2 = ::GetTickCount64();
cout << "meanStdDev图片处理用时:" << (end2 - start2) << "ms\n";
return 0;
system("pause");
}
运行结果:
例2:
没有计时器对比
#include <stdio.h>
#include <opencv2/core.hpp> // Basic OpenCV structures (cv::Mat, Scalar)
#include <opencv2/imgproc.hpp> // Gaussian Blur
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <string>
using namespace std;
using namespace cv;
int main()
{
Mat image = imread("E:\\projects\\ThreadSecond\\data\\3_2_shineiguangpicROI\\mark_1.jpg");
if (image.data == 0)
{
cout << "发生读取错误" << endl;
}
cv:Scalar tempVal = cv::mean(image);
printf("mean B通道均值为:%lf G通道均值为:%f R通道均值为:%f \n", tempVal.val[0], tempVal.val[1], tempVal.val[2]);
Mat mean, stddev;
meanStdDev(image, mean, stddev);
printf("B通道均值为:%lf G通道均值为:%lf R通道均值为:%lf \n", mean.at<double>(0, 0), mean.at<double>(1, 0), mean.at<double>(2, 0));
return 0;
system("pause");
}
运行结果: