您的位置:首页 > 其它

图像积分图的计算

2016-01-16 16:18 302 查看
图像积分图的定义百度一下。

/*
*@function IntegralImage.cpp
*@brief 计算积分图
*@author ltc
*@date 18:14 Tuesday,December 1st,2015
*/

#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main(int argc,char* argv[])
{
//读取图像
Mat image;
image=imread("lena.bmp",IMREAD_COLOR);
if(image.empty())
{
cerr<<"Failure in loading image"<<endl;
return -1;
}
//转换成灰度图像
Mat grayImage;
cvtColor(image,grayImage,COLOR_BGR2GRAY);
//定义、计算积分图像,积分图像比灰度图像多一行一列
Mat integralImage=Mat::zeros(grayImage.rows+1,grayImage.cols+1,CV_32SC1);
for(int i=0;i<grayImage.rows;i++)
{
for(int j=0;j<grayImage.cols;j++)
{
integralImage.at<int>(i+1,j+1)=integralImage.at<int>(i,j+1)
+integralImage.at<int>(i+1,j)
-integralImage.at<int>(i,j)
+grayImage.at<unsigned char>(i,j);

}
}
//真正的积分图像
Mat realIntegralImage=integralImage(Range(1,integralImage.rows),Range(1,integralImage.cols));
/*cout<<realIntegralImage.row(0)<<endl;*/
//Opencv中自带的积分图像计算
Mat integralImage_integral;
integral(grayImage,integralImage_integral);
//下面两行代码用来对比自己的积分图像和Opencv自己计算的积分图像是否一样
//cout<<integralImage.row(1)<<endl;
//cout<<integralImage_integral.row(1)<<endl;
imshow("src",image);
imshow("gray",grayImage);
waitKey(0);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: