图像的平均值opencv
mean of an image opencv?
我不确定我的均值函数。在Matlab中,通过使用mean2
,我的图像的平均值为135.3565
;然而,我的函数给出了140.014
,OpenCV内置的cv::mean
给了我[137.67, 152.467, 115.933, 0]
。这是我的密码。
double _mean(const cv::Mat &image)
{
double N = image.rows * image.cols;
double mean;
for (int rows = 0; rows < image.rows; ++rows)
{
for (int cols = 0; cols < image.cols; ++cols)
{
mean += (float)image.at<uchar>(rows, cols);
}
}
mean /= N;
return mean;
}
我的猜测是,您将一种类型的图像输入到Matlab,另一种类型输入到算法和opencv内置函数。
Matlab的mean2函数获取2D图像(灰度)。您的函数假设图像是无符号字符的2D矩阵(灰度也是),当您这样做时:
mean += (float)image.at<uchar>(rows, cols);
如果将彩色图像传递给函数,则会检索到不正确的值。在传递给函数之前,尝试将图像转换为灰度,并将结果与Matlab进行比较。
对于彩色图像,将您的功能修改为:
double _mean(const cv::Mat &image)
{
double N = image.rows * image.cols * image.channels();
double mean;
for (int rows = 0; rows < image.rows; ++rows)
{
for (int cols = 0; cols < image.cols; ++cols)
{
for(int channels = 0; channels < image.channels(); ++channels)
{
mean += image.at<cv::Vec3b>(rows, cols)[channels];
}
}
}
mean /= N;
return mean;
}
并在Matlab中使用计算平均值
mean(image(:))
它将在计算平均值之前对您的图像进行矢量化。比较结果。
opencv函数分别计算图像的每个通道的平均值,因此结果是每个通道平均值的向量。
我希望这会有所帮助!
相关文章:
- 计算数组c++的平均值
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- OpenCV C++.快速计算混淆矩阵
- 计算平均值,不包括上次得分
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 彩色图像的卤化物处理平均值
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 哪些库可以通过Opencv调整曝光率
- 安装opencv失败-粘贴CMakeError.log的内容
- 如何将"mean_file_proto"读入OpenCV Mat,以便从平均值中减去图像以在Caffe模型中使用?
- OpenCV-C++中Mat对象的平均值
- 在OpenCV中使用遮罩和ROI计算轮廓内浮器的图像像素值(例如平均值)
- 一些帧的平均值/使用c++和opencv获得错误
- OpenCV 中的函数可同时查找任何一个维度(行/列)的平均值/平均值
- 图像的平均值opencv