在 BMP 像素 RGB 阵列上应用模糊
Apply blur on BMP pixel RGB array
我正在尝试应用模糊效果,但我得到的颜色完全错误
我正在使用 Easy_BMP 库将 BMP 文件加载到像素数组中。
我尝试参考 this topic 实现高斯模糊算法。怎么了?
void blur3x3(int i, int j, RGBApixel** pixelArray, BMP &Image) {
double blurValue = 0.111;
int avgR = 0;
int avgG= 0 ;
int avgB = 0;
int b = 0;
for(int w = i-1 ; w <= i+1 ; w++) {
for(int z = i-1 ; z<=j+1 ; z++) {
avgR = avgR + blurValue*( pixelArray[w][z].Red );
avgG = avgG + blurValue*( pixelArray[w][z].Green );
avgB = avgB + blurValue*( pixelArray[w][z].Blue );
}
}
Image(i,j)->Red = (BYTE) avgR ;
Image(i,j)->Green = (BYTE) avgG;
Image(i,j)->Blue = (BYTE) avgB;
}
bool blur() {
BMP Image;
Image.ReadFromFile(fullFilePath);
int w = Image.TellWidth();
int h = Image.TellHeight();
RGBApixel** pixelArray = new RGBApixel*[w];
for(int i = 0; i < w; ++i)
pixelArray[i] = new RGBApixel[h];
for( int i=0 ; i < Image.TellWidth() ; i++) {
for( int j=0 ; j < Image.TellHeight() ; j++) {
pixelArray[i][j] = Image.GetPixel(i,j);
}
}
for( int i=1 ; i < Image.TellWidth()-1 ; i++) {
for( int j=1 ; j < Image.TellHeight()-1 ; j++) {
blur3x3(i,j, pixelArray, Image);
}
}
Image.SetBitDepth( 32 );
Image.WriteToFile( "/home/kxyz/BMP/gray.bmp" );
}
在 for(int z = i-1 ; z<=j+1 ; z++) {
中,尝试更改
int z = i-1
到
int z = j-1
此外,您没有删除在 blur
函数中分配的任何数组。
我正在尝试应用模糊效果,但我得到的颜色完全错误 我正在使用 Easy_BMP 库将 BMP 文件加载到像素数组中。 我尝试参考 this topic 实现高斯模糊算法。怎么了?
void blur3x3(int i, int j, RGBApixel** pixelArray, BMP &Image) {
double blurValue = 0.111;
int avgR = 0;
int avgG= 0 ;
int avgB = 0;
int b = 0;
for(int w = i-1 ; w <= i+1 ; w++) {
for(int z = i-1 ; z<=j+1 ; z++) {
avgR = avgR + blurValue*( pixelArray[w][z].Red );
avgG = avgG + blurValue*( pixelArray[w][z].Green );
avgB = avgB + blurValue*( pixelArray[w][z].Blue );
}
}
Image(i,j)->Red = (BYTE) avgR ;
Image(i,j)->Green = (BYTE) avgG;
Image(i,j)->Blue = (BYTE) avgB;
}
bool blur() {
BMP Image;
Image.ReadFromFile(fullFilePath);
int w = Image.TellWidth();
int h = Image.TellHeight();
RGBApixel** pixelArray = new RGBApixel*[w];
for(int i = 0; i < w; ++i)
pixelArray[i] = new RGBApixel[h];
for( int i=0 ; i < Image.TellWidth() ; i++) {
for( int j=0 ; j < Image.TellHeight() ; j++) {
pixelArray[i][j] = Image.GetPixel(i,j);
}
}
for( int i=1 ; i < Image.TellWidth()-1 ; i++) {
for( int j=1 ; j < Image.TellHeight()-1 ; j++) {
blur3x3(i,j, pixelArray, Image);
}
}
Image.SetBitDepth( 32 );
Image.WriteToFile( "/home/kxyz/BMP/gray.bmp" );
}
在 for(int z = i-1 ; z<=j+1 ; z++) {
中,尝试更改
int z = i-1
到
int z = j-1
此外,您没有删除在 blur
函数中分配的任何数组。