OpenCV基本プログラム

久々にOpenCVを使おうとすると毎回文法忘れてるのでまとめ.
読み込んだsample.jpgをグレースケールにして表示,保存.

#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"cvaux.lib")
#pragma comment(lib,"highgui.lib")
#include <highgui.h>

#define filename "sample.jpg"

int main(void)
{
	int x,y;
	uchar p[3],Gray;
	IplImage *src,*img;

	if((src=cvLoadImage(filename,CV_LOAD_IMAGE_COLOR))==0)
		return -1;
	if((img=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1))==0)
		return -1;

	for(y=0;y<src->height;y++){
		for(x=0;x<src->width;x++){
			p[0] = src->imageData[src->widthStep*y + x*3];		// B
			p[1] = src->imageData[src->widthStep*y + x*3 + 1];	// G
			p[2] = src->imageData[src->widthStep*y + x*3 + 2];	// R

			Gray = cvRound(0.114478*p[0] + 0.586611*p[1] + 0.298912*p[2]);	// 整数値に丸め
			img->imageData[img->widthStep*y + x] = Gray;
		}
	}

	cvNamedWindow("Image",CV_WINDOW_AUTOSIZE);
	cvShowImage("Image",img);
	cvWaitKey(0);

	cvDestroyWindow("Image");

	cvSaveImage("result.jpg",img);
	cvReleaseImage(&src);
	cvReleaseImage(&img);

	return 0;
}


ちなみにグレースケール変換は cvCvtColor (src, img, CV_BGR2GRAY) を使っても一瞬で出来る.参照↓
http://opencv.jp/opencv-1.0.0/document/opencvref_cv_filters.html

ところでアルゴリズムってなに?
目的から現状を引いたもの?