最近做了几个平滑锐化的程序效果都是比opencv差一些,猜测opencv应该加了一些效果优化。
{
int FilterW=0;
int FilterH=0;
int FilterCenterX=0;
int FilterCenterY=0;
int aValue[64]={0};//滤波掩模
int tempV=0;
FilterW=3;
FilterH=3;
FilterCenterX=1;
FilterCenterY=1;
cvCopy(pImg,pDestImg,0);
for(int i = FilterCenterY; i < pImg->height-FilterH+FilterCenterY+1; i++){
for(int j = FilterCenterX; j < pImg->width-FilterW+FilterCenterX+1; j++){
// 读取滤波器数组
for (int k = 0; k < FilterH; k++)
{
for (int l = 0; l < FilterW; l++)
{
// 指向DIB第i - iFilterMY + k行,第j - iFilterMX + l个象素的指针
aValue[k * FilterW + l] = pImg->imageData[pImg->widthStep * (i - FilterCenterY + k) + (j - FilterCenterX + l) ];
}
}
//tempV= aValue[0]+aValue[1]+aValue[2]+aValue[3]+aValue[5]+aValue[6]+aValue[7]+aValue[8]-8*aValue[4];
tempV= aValue[1]+aValue[3]+aValue[5]+aValue[7]-4*aValue[4];
if(tempV>255)
tempV=255;
else if(tempV<0)
tempV=0;
pDestImg->imageData[pDestImg->widthStep * i + j ]= tempV; //pImg->imageData[pImg->widthStep * i + j ] - tempV;
}
}
return 0;
}
效果图:
opencv函数 void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3 ); 效果图: