加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

opencv 抗锯齿代码

(2013-07-06 18:03:52)
分类: opencv

 

//增加边缘抗锯齿算法

//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];

            }


            

        }

    }

    

}


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有