//增加边缘抗锯齿算法
//imageIn: 输入图片
//maskEdge:
图片中感兴趣内容边缘需要处理的锯齿mask
//maskSrc: 图片中感兴趣内容的mask
//imageOut: 输出图片
void
Anti_Aliasing_edge(Mat imageIn, Mat maskEdge, Mat maskSrc, Mat
imageOut)
{
if
(imageIn.cols*3 != imageIn.step) {
cout<<"image's step isn't
image.cols*3"<<endl;
}
int r
= 1;
for
(int i=r; i<imageIn.rows-r; i++) {
for (int j=r;
j<imageIn.cols-r; j++) {
float valS_b = 0;
float valS_g = 0;
float valS_r = 0;
float noS_Mask1f=0.0;
float valAver_b,valAver_g,valAver_r;
for (int ri = -r; ri<=r; ri++)
{
for (int
rj = -r; rj<=r; rj++) {
int x = j+rj;
int y = i+ri;
int tvMask =
(uchar)maskSrc.data[y*maskSrc.step+x];
if (1 == tvMask) {
noS_Mask1f++;
}
valS_b +=
(uchar)imageIn.data[y*imageIn.step+x*3];
valS_g +=
(uchar)imageIn.data[y*imageIn.step+x*3+1];
valS_r +=
(uchar)imageIn.data[y*imageIn.step+x*3+2];
}
}
int noSi = (int)noS_Mask1f;
int sumS = (r+r+1)* (r+r+1);
if (noSi < sumS
&& noSi>0) {
valAver_b
= valS_b/(uchar)sumS;
valAver_g
= valS_g/(uchar)sumS;
valAver_r
= valS_r/(uchar)sumS;
imageOut.data[i*imageOut.step+j*3] = (uchar)valAver_b;
imageOut.data[i*imageOut.step+j*3+1] = (uchar)valAver_g;
imageOut.data[i*imageOut.step+j*3+2] = (uchar)valAver_r;
}
else{
imageOut.data[i*imageOut.step+j*3] =
(uchar)imageIn.data[i*imageIn.step+j*3];
imageOut.data[i*imageOut.step+j*3+1] =
(uchar)imageIn.data[i*imageIn.step+j*3+1];
imageOut.data[i*imageOut.step+j*3+2] =
(uchar)imageIn.data[i*imageIn.step+j*3+2];
}
}
}
}
加载中,请稍候......