#include <stdio.h>
#include <cstdlib>
#include <opencv2/highgui.hpp>
#include "opencv2/imgproc.hpp"
#include <iostream>
#include <fstream>
int main(int argc, char* argv[])
{
int w = 0, h = 0;
// string fileName = argv[1];
// cv::Mat src = cv::imread(fileName, CV_LOAD_IMAGE_GRAYSCALE);
cv::Mat src;
src.create(32, 16, CV_8UC1);
cv::Mat media;
media.create(src.rows, src.cols, CV_32SC1);
cv::Mat dst;
dst.create(src.rows, src.cols, CV_32SC1);
printf("%d,%d,%d\n", src.rows, src.cols, src.channels());
printf("\n***********orignal image:\n");
for(int i = 0; i < src.rows; i++)
{
unsigned char *psrc = src.ptr<unsigned char>(i);
for(int j = 0; j < src.cols; j++, psrc++)
{
*psrc = rand()%256;
printf("%3u ", *psrc);
}
printf("\n");
}
for(int i = 0; i < src.rows; i++)
{
unsigned char *psrc = src.ptr<unsigned char>(i);
int *pmedia = media.ptr<int>(i);
int *pdst = dst.ptr<int>(i);
int *pdstPrev=NULL;
if(i)
pdstPrev = dst.ptr<int>(i-1);
for(int j = 0; j < src.cols; j++)
{
if(j == 0)
{
*pmedia = *psrc;
}
else
{
*pmedia = *psrc + *(pmedia - 1);
}
if(pdstPrev == NULL)
{
*pdst = *pmedia;
}
else
{
*pdst = *pdstPrev + *pmedia;
}
psrc++;
pmedia++;
pdst++;
if(pdstPrev)
pdstPrev++;
}
}
printf("\n***********integral image:\n");
for(int i = 0; i < src.rows; i++)
{
int *pdst = dst.ptr<int>(i);
for(int j = 0; j < src.cols; j++, pdst++)
{
printf("%6u ", *pdst);
}
printf("\n");
}
return 0;
}