【发布时间】:2013-12-08 18:27:47
【问题描述】:
我知道这里已经有类似的问题,但没有任何答案对我有帮助。
这是我的问题:
我给出了一个包含 512x512 像素的数组。每个像素都有一个类似 165.88009 的值。
(稍后我必须在 GnuPlot 中创建热图)
现在我想通过创建可变像素块(如 4-16)的平均值来“平滑”它,并将其写入新的二维数组并跳转到下一个块,直到完成。
数组的大小应该保持不变。因此,如果我平均 4 个像素,那 4 个像素将获得新值。
我为此做了一个函数,但它不能正常工作。
计算平均值不是我的问题。问题是我想要一个可变像素宽度,但我不知道如何让我的算法跳转到下一个块。
我没有 C++ 经验,也许我必须完全不同。
因此,非常感谢任何帮助或启发 :)
这是我的代码:
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
int i, j, m, n, k;
void Average(double **Data, int width) // width gets defined and initiated in main
{
double sum;
double avg;
fstream Output;
Output.open( "GemittelteWerte.dat", ios::out);
double** IV_Matrix = new double* [m];
for (int i=0; i<m; i++)
{
IV_Matrix[i] = new double [n];
}
for (int i=0; i<m; i++)
{
for (int j=0; j<n; j++)
{
IV_Matrix[i][j] = 1.0;
}
}
// Here start all my troubles:
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j+=width)
{
sum = 0.0;
k=j;
for( k; k<(j+width); k++)
{
sum+=Data[i][k];
}
avg=(sum/width);
for (int k; k<(j+width); k++)
{
IV_Matrix[i][k] = avg;
}
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
Output<<setprecision(10)<<IV_Matrix[i][j]<<"\t";
}
Output<<"\n";
}
Output.close();
}
【问题讨论】: