构建代码时,运行没有问题,但是我调试了代码,这生成了一条消息:函数使用栈的'1600000620'字节:超出/分析:stacksize 16384'。
我将声明:int array [2000] [2000]放入int main {}中,因为当int array [2000] [2000]不在int main {}中时,它会产生错误:array不明确。>
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
/* Function to sort an array using insertion sort*/
void insertionSort(int arr[],int n)
{
int i,key,j;
for (i = 1; i < n; i++){
key = arr[i];
j = i - 1;
/* Move elements of arr[0..i-1],that aregreater than key,to one
position aheadof their current position */
while (j >= 0 && arr[j] > key){
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
int arr[2000][2000];
int main()
{
int array[2000][2000];
int window[9],row = 0,col = 0,numrows = 0,numcols = 0,MAX = 0;
ifstream infile("phone.jpg");
stringstream ss;
string inputLine = "";
// First line : version
getline(infile,inputLine);
if (inputLine.compare("P2") != 0) cerr << "Version error" << endl;
else cout << "Version : " << inputLine << endl;
// Continue with a stringstream
ss << infile.rdbuf();
// Secondline : size of image
ss >> numcols >> numrows >> MAX;
//print total number of rows,columns and maximum intensity of image
cout << numcols << " columns and " << numrows << " rows" << endl<<
"Maximium Intesity "<< MAX <<endl;
//Initialize a new array of same size of image with 0
for (row = 0; row <= numrows; ++row)
{
array[row][0] = 0;
}
for (col = 0; col <= numcols; ++col) {
array[0][col] = 0;
}
// Following lines : data
for (row = 1; row <= numrows; ++row)
{
for (col = 1; col <= numcols; ++col)
{
//original data store in new array
ss >> array[row][col];
}
}
// Now print the array to see the result
for (row = 1; row <= numrows; ++row)
{
for (col = 1; col <= numcols; ++col)
{
//neighbor pixel values are stored in window including this pixel
window[0] = array[row - 1][col - 1];
window[1] = array[row - 1][col];
window[2] = array[row - 1][col + 1];
window[3] = array[row][col - 1];
window[4] = array[row][col];
window[5] = array[row][col + 1];
window[6] = array[row + 1][col - 1];
window[7] = array[row + 1][col];
window[8] = array[row + 1][col + 1];
//sort window array
insertionSort(window,9);
//put the median to the new array
arr[row][col] = window[4];
}
}
ofstream outfile;
//new file open to stroe the output image
outfile.open("Medianfilter.pnm");
outfile << "P2" << endl;
outfile << numcols << " " << numrows << endl;
outfile << "255" << endl;
for (row = 1; row <= numrows; ++row)
{
for (col = 1; col <= numcols; ++col)
{
//store resultant pixel values to the output file
outfile << arr[row][col] << " ";
}
}
outfile.close();
infile.close();
return 0;
}
我希望该程序可以清除图像,消除图像中的噪点。