opencv 积分图像以及盒子滤波

本章内容:


1. 积分图像
2. 盒子滤波(均值滤波)

1. 积分图像

输出结果

2. 盒子滤波(均值滤波)

 

输出结果:

源码

 

#include <ostream>
#include <opencv.hpp>
#include<opencv2/opencv.hpp>
#include "opencv2/xfeatures2d.hpp"

int main(int argc, char *argv[])
{
    /*
     本章内容:
        1. 积分图像
        2. 盒子滤波(均值滤波)
    */
    cv::String fileName = "/home/wang/dev/Image/c++father.jpg";
    cv::Mat src = cv::imread(fileName);
    cv::Mat src1 = src.clone();
    if(src.data == NULL){
        printf("图像读入失败\n");
        return -1;
    }
    cv::imshow("src",src);
    /*1.积分图像
        api接口: CV_EXPORTS_W void integral( InputArray src, OutputArray sum, int sdepth = -1 );
    */
    cv::Mat gray;
    cv::cvtColor(src,gray,cv::COLOR_BGR2GRAY);
    gray.convertTo(gray,CV_32F);
    cv::Mat dstInte;//(gray.size(),CV_32S);
    cv::integral(gray,dstInte);
    cv::Mat dstInterNORM = dstInte.clone();
    cv::normalize(dstInterNORM,dstInterNORM,255,0,cv::NORM_L2);
    cv::imshow("integral image", dstInterNORM);

    // 2. 盒子滤波(均值滤波)
    std::cout << "src.size() = " << src.size() << " dstInte.size()= " << dstInte.size() << std::endl;
    cv::Mat grayM(gray.size(),CV_64F);
    int kerSize = 3;
    for(int i=kerSize; i < src.rows - kerSize; i++){
        for(int j=kerSize; j < src.cols - kerSize; j++){
            grayM.at<double>(i,j) = (dstInte.at<double>(i+kerSize,j+kerSize) + dstInte.at<double>(i-kerSize,j-kerSize)
                    - dstInte.at<double>(i+kerSize,j-kerSize) - dstInte.at<double>(i-kerSize,j+kerSize))/(kerSize*2+1)/(kerSize*2+1);
        }
    }
    std::cout << "\n type "  << dstInte.type() << std::endl;
    cv::normalize(grayM,grayM,255,0,cv::NORM_L2);
    cv::imshow("gray",gray/255);
    cv::imshow("gray filter",grayM);

    cv::waitKey(0);
    return 1;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值