博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用积分图进行均值滤波
阅读量:7174 次
发布时间:2019-06-29

本文共 2368 字,大约阅读时间需要 7 分钟。

void integral_blur()

{
    Mat src = imread("src960_720.bmp", 1);
    int height = src.rows;
    int width = src.cols;
    int Rmax = 5;
    int sh2 = Rmax / 2;
    int sw2 = Rmax / 2;
    int Rsize = Rmax;
    int RsizeArea = 1.0 / (Rsize * Rsize) * 2048;
    cout << RsizeArea << endl;
    Mat srcborder;
    MakeBorder(src, srcborder, sw2, sh2);
    int ybegin = sh2;
    //int yend = height - sh2;
    int xbegin = sw2;
    //int xend = width - sw2;
    int nchannel = src.channels();
    Mat blurimg(height, width, CV_8UC3);
    for (int i = 0; i < height; ++i)
    {
        uchar *blurimgRow = blurimg.ptr<uchar>(i);
        for (int j = 0; j < width; ++j)
        {
            uchar *blurimgCol = blurimgRow + j * nchannel;
            int nCenter = Rsize >> 1;
            int sumR = 0;
            int sumG = 0;
            int sumB = 0;
            int jxbegin = j + xbegin - nCenter;
            int iybegin = i + ybegin - nCenter;
            for (int y = 0; y < Rsize; ++y)
            {
                uchar *srcRow = srcborder.ptr<uchar>(iybegin + y);
                for (int x = 0; x < Rsize; ++x)
                {
                    uchar *srcCol = srcRow + (jxbegin + x) *nchannel;
                    sumR += srcCol[2];
                    sumG += srcCol[1];
                    sumB += srcCol[0];
                }
            }
            blurimgCol[0] = (sumB * RsizeArea) >> 11;
            blurimgCol[1] = (sumG * RsizeArea) >> 11;
            blurimgCol[2] = (sumR * RsizeArea) >> 11;
        }
    }

 

    Mat srcborder_integral;
    integral(srcborder, srcborder_integral, CV_32S);
    Mat blurimg_integral(height, width, CV_8UC3);
    for (int i = 0; i < height; ++i)
    {
        uchar *blurimgRow = blurimg_integral.ptr<uchar>(i);
        for (int j = 0; j < width; ++j)
        {
            uchar *blurimgCol = blurimgRow + j * nchannel;
            int nCenter = Rsize >> 1;
            int jxbegin = j + xbegin - nCenter;
            int iybegin = i + ybegin - nCenter;
            int jxend = jxbegin + Rsize;
            int iyend = iybegin + Rsize;
            int *p1 = srcborder_integral.ptr<int>(iybegin) +(jxbegin)*nchannel;
            int *p2 = srcborder_integral.ptr<int>(iybegin) +(jxend)*nchannel;
            int *p3 = srcborder_integral.ptr<int>(iyend) +(jxbegin)*nchannel;
            int *p4 = srcborder_integral.ptr<int>(iyend) +(jxend)*nchannel;
            int sumR = p1[2] +  p4[2] -  p2[2] - p3[2];
            int sumG = p1[1] + p4[1] - p2[1] - p3[1];
            int sumB = p1[0] + p4[0] - p2[0] - p3[0];
            blurimgCol[0] = (sumB * RsizeArea) >> 11;
            blurimgCol[1] = (sumG * RsizeArea) >> 11;
            blurimgCol[2] = (sumR * RsizeArea) >> 11;
        }
    }
    Mat blurimg_opencv;
    blur(src, blurimg_opencv, Size(Rmax, Rmax));
    namedWindow("src", 0);
    imshow("src", src);
    namedWindow("dst0", 0);
    imshow("dst0", blurimg);
    namedWindow("dst1", 0);
    imshow("dst1", blurimg_opencv);
    namedWindow("dst2", 0);
    imshow("dst2", blurimg_integral);
    waitKey(0);
}

转载地址:http://xxbzm.baihongyu.com/

你可能感兴趣的文章
重建二叉树 (剑指offer第六题)
查看>>
爬虫基础 pyquery 详解
查看>>
QT creator+OpenCV2.4.2+MinGW 在windows下开发环境配置
查看>>
Allegro PCB Design GXL (legacy) 设置十字大光标
查看>>
数据结构--图的定义和存储结构
查看>>
[C#参考]委托机制
查看>>
linux常用命令
查看>>
自然杂志上的影评
查看>>
SQL Server 存储过程
查看>>
Appium自动化测试1 - 安装部署
查看>>
广州.NET微软技术俱乐部微信群各位技术大牛的blog
查看>>
《Redis设计与实现》之第九章:数据库
查看>>
10月10日学习内容整理:socketserver模块,ftp作业讲解
查看>>
P1352 没有上司的舞会
查看>>
Bzoj 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 深搜,bitset
查看>>
关于《淘宝技术这十年》
查看>>
c#事件机制
查看>>
冒泡排序
查看>>
Sublime一键预览
查看>>
C#使用log4net记录日志
查看>>