opencv積分圖計算

積分圖用處可多了,像在檢測人臉的時候haar提取特徵,surf算法。使用積分圖後大大提升運算效率,以使adaboost算法能夠實時的處理人臉檢測的工作,下面是算法代碼:

void integral(const IplImage* img, IplImage* outIntegral)
{
	//必須是32bit的輸出圖
	CV_Assert(outIntegral->depth == IPL_DEPTH_32S);

	int* ptrOut = (int*)outIntegral->imageData;
	int* ptrOutUpLine = 0;
	unsigned char* ptrImg = (uchar*)img->imageData;
	unsigned char* ptrImgUpLine = 0;

	//計算第一行
	ptrOut[0] = ptrImg[0];
	for (int x = 1; x < img->width; ++x)
		ptrOut[x] = ptrImg[x] + ptrOut[x - 1];

	//計算剩餘行
	for (int y = 1; y < img->height; ++y)
	{
		ptrImgUpLine = ptrImg;
		ptrImg = (uchar*)img->imageData + img->widthStep * y;
		ptrOutUpLine = ptrOut;
		ptrOut = (int*)(outIntegral->imageData + outIntegral->widthStep * y);
		
		ptrOut[0] = ptrImg[0] + ptrOutUpLine[0];
		for (int x = 1; x < img->width; ++x)
			ptrOut[x] = ptrImg[x] + ptrOut[x - 1] + ptrOutUpLine[x] - ptrOutUpLine[x - 1];
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章