我有一个存根来实现。这会将图像降级2倍。输入是输入图像的图像阵列。 output是输出图像的输出数组。 output_height和output_width是输出图像的高度和宽度。降级每个2X2块时,由单个像素替换,其中像素值是2X2块中的最大值。这些数组是行主格式。我的代码如下 -
int input_index_row=0;
int output_index_row=0;
int input_index_column=0;
int output_index_column=0;
//unsigned char max(unsigned char* a,int width)
void print_input(unsigned char*input,int input_width,int input_height)
{
cout<<"input->"<<endl;
for(int i=0;i<input_width*input_height;i++)
{
if(i%input_width==0)
{
cout<<"::::";
}
cout<<(int)input[i]<<"-";
}
cout<<endl;
}
void print_output(unsigned char*output,int output_width,int output_height)
{
cout<<"output->"<<endl;
for(int i=0;i<output_height*output_width;i++)
{
cout<<(int)output[i]<<"-";
}
cout<<endl;
}
unsigned char* loc(unsigned char*a,int i,int j,int width)
{
return a+width*i+j;
}
unsigned char max_loc(unsigned char*a,int i,int j,int width)
{
unsigned char* res=0;
res=loc(a,i,j,width);
unsigned char max= *res;
res=loc(a,i,j+1,width);
if(max<*res)
{
max = *res;
}
res= loc(a,i+1,j,width);
if(max<*res)
{
max = *res;
}
res= loc(a,i+1,j+1,width);
if(max<*res)
{
max = *res;
}
cout<<"max="<<(int)max<<endl;
return max;
}
void downgrade(unsigned char *input,unsigned char* output,int output_width,int output_height)
{
/*int output_width=4;
int output_height= 4;*/
int input_width=output_width*2;
int input_height=output_height*2;
/*unsigned char *input= new unsigned char[input_width*input_height];
for(unsigned char i=0;i<input_width*input_height;i++) input[i]=i;
print_input(input,input_width,input_height);
unsigned char* output = new unsigned char[output_width*output_height];*/
unsigned char* result;
while(input_index_row<input_height)
{
while(input_index_column<input_width)
{
result = loc(output,output_index_row,output_index_column,output_width);
*result = max_loc(input,input_index_row,input_index_column,input_width);
input_index_column+=2;
output_index_column++;
}
input_index_row+=2;
output_index_row++;
input_index_column=0;
output_index_column=0;
}
cout<<endl;
print_input(input,input_width,input_height);
print_output(output, output_width,output_height);
}
但我的输出图像已损坏 这是一个jpeg图像。我需要转换为灰度。