一些帧的平均值/使用c++和opencv获得错误

average of some frames / getting error using c++ and opencv

本文关键字:opencv 错误 c++ 使用 平均值      更新时间:2023-10-16

我想得到5帧的平均值,它们的Itime等于1000。我的代码有什么问题?为什么我在返回部分出错?

float Data::HighestTime(float *distances){
Mat mean_distances; 
if(Itime=1000){
for(int i=0; i<5; i++){
cv::Mat matDistances = Mat(width, height, CV_32FC1, distances);
Mat mean_distances = matDistances;
mean_distances = mean_distances * (1/5);
}
}
return mean_distances;
}

版本后:

cv::Mat Data::HighestTime(float *distances){
Mat mean_distances; 
if(Itime=1000){
for(int i=0; i<5; i++){
cv::Mat matDistances = Mat(width, height, CV_32FC1, distances);
Mat mean_distances = matDistances;
mean_distances = mean_distances * (1/5);
}
}
return mean_distances;
}

我有一个新错误:

假设我有这个功能:

cv::Mat Data::HighestTime(float* distances){
Mat mean_distances; 
return mean_distances;
}

我想在这个函数中使用它的返回值:

void Data::Filter(){
HighestTime(float* distances);
medianBlur(mean_distances, mean_distances, ksize);
}

它抱怨没有定义mean_dinstances!我应该把它定义为函数的参数吗?

有一些事情需要考虑。

Itime==1000,因为您不想将1000分配给Itime

此外,什么是float *distances?我认为它是一个指向数组的指针,因此,您必须增加指针并用*(distances + i)取消引用它

当你喜欢计算平均值时,你必须计算平均值,这是通过以下方式完成的:

  1. 将所有值相加:meanDistances += matDistances;
  2. 将总和除以值的数量:meanDistances /= 5.0f(这里需要5.0,因为你不想有类似于0的(1/5)这样的整数除数)

函数确实返回类型为float的值。您得到了一个编译器错误,因为您实际返回的是mean_distances,它属于cv::Mat类型。只需将方法的签名更改为Mat Data::HighestTime(float *distances)即可消除该错误。


编辑:

至于你的第二个错误。实际上,您必须保存调用HighestTime返回的值。你的第二个功能应该是:

void Data::Filter(){
Mat mean_distances = HighestTime(float* distances);
medianBlur(mean_distances, mean_distances, ksize);
}