好学IT学院:IT信息技术分享交流平台
标签:C++  来源:互联网  作者:佚名  发布时间:2008-10-20  ★★★加入收藏〗〖手机版
摘要:C++Builder提供了一些图形类,它们通过对Windows中的图形对象进行包装,从而大大简化了图像操作的难度。下面就通过对图像进行柔化、锐化、浮雕效果等几个特殊效果处理来具体说明一下。…

三、图像的锐化处理

图像的锐化处理正好与柔化处理相反,它的目的是突出图像的变化部分,这里采用的算法是将要处理的像素与它左对角线的像素之间的差值乘上一个锐化度数,然后再加上原先的像素值:new_value=original_value+degree*difference,你可以通过改变degree的值来调节锐化效果。这里需要注意的是得到的像素新值可能会超出颜色值的有效范围(0-255),所以程序要检验结果的有效性,为此需定义两个函数:

int min(int value1,int value2)
{
if(value1 >value2)return value2;
else return value1;
}

int max(int value1,int value2)
{
if(value1 >value2)return value1;
else return value2;
}

锐化处理的代码如下:

void __fastcall TForm1::btnSharpeClick(TObject *Sender)
{
float degree=0.3;
int red,green,blue;
for(i=1;i<width-1;i++){
  for(j=1;j<height-1;j++)
  {
  red=rgb[i][j].r_color+degree*(rgb[i][j].r_color-rgb[i-1][j-1].r_color);
  green=rgb[i][j].g_color+degree*(rgb[i][j].g_color-rgb[i-1][j-1].g_color);
  blue=rgb[i][j].b_color+degree*(rgb[i][j].b_color-rgb[i-1][j-1].b_color);
  red=min(255,max(0,red));
  green=min(255,max(0,green));
  blue=min(255,max(0,blue));
  bitmap->Canvas->Pixels[i][j]=RGB (red,green,blue);
  }
  Image1- >Picture- >Bitmap- >Assign(bitmap);
}
}

四、图像的浮雕效果实现

浮雕效果就是只将图像的变化部分突出出来,而相同颜色部分则被淡化,使图像出现纵深感,从而达到浮雕效果,这里采用的算法是将要处理的像素取值为与处于对角线上的另一个像素间的差值,这样只有颜色变化区才会出现色彩,而颜色平淡区因差值几乎为零则变成黑色,你可以通过加上一个常量来增加一些亮度:new_value=difference+const_value,具体代码如下:

void __fastcall TForm1::btnEmbossClick(TObject *Sender)
{
int red,green,blue;
const int const_value=128;
for(i=0;i< width-2;i++){
  for(j=0;j< height-2;j++)
  {
  red=abs(rgb[i][j].r_color-rgb[i+1][j+1].r_color+const_value);
  green=abs(rgb[i][j].g_color-rgb[i+1][j+1].g_color+const_value);
  blue=abs(rgb[i][j].b_color-rgb[i+1][j+1].b_color+const_value);
  bitmap->Canvas->Pixels[i][j]=RGB(red,green,blue);
  }
Image1- >Picture- >Bitmap- >Assign(bitmap);

}

上面介绍了图像处理中的几个常见操作,所采用的算法相对比较简单,感兴趣的朋友可以举一返三,通过改进上述算法,达到更好的特殊效果。以上代码在C++ Builder6、Win2000下编译、运行通过。