我知道這裏已經有類似的問題,但沒有答案真的幫助我。 這是我的問題:
我給它一個512x512像素的數組。每個像素的值都是165.88009。
(I不得不以後創建在GNUPLOT熱圖)通過創建像素的可變塊的平均(如4-16)
C++計算二維數組中可變寬度數的平均值
現在我想「平滑」,並將其寫入到一個新的2D陣列和跳到下一個塊直到完成。
數組的大小應該保持不變。所以如果我平均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();
}
沒有它不是一個2D塊。我只想要連續4-16個像素的平均值。所以,我得到的平均值,可以說4個像素,寫入一個新的矩陣或覆蓋舊的4個像素,並轉到下一個4個像素。 – user3080351
@ user3080351:看我的編輯 – mb84
現在工作正常。謝謝! – user3080351