OpenCVを用いて、webカメラ画像をセピア表示する

重い。
while(1)の中は、あまり処理を書きたくないです。
ですが、画像を取り込んでそのサイズに応じた画像を作らなくてはならないので、
whileの中はこんな感じ。
もっと簡単にかける方教えてください。

#include  
#include
#include
#include
#include

#define DEFAULT_H 22//H値を置き換える値

#define DEFAULT_S 90//S値を置き換える値

int main (void)
{
CvCapture *capture = 0;
IplImage *frame = 0;//取り込まれるカメラ画像


double w = 160, h = 120;
int c;

// (1)コマンド引数によって指定された番号のカメラに対するキャプチャ構造体を作成する
// if (argc == 1 || (argc == 2 && strlen (argv[1]) == 1 && isdigit (argv[1][0])))
capture = cvCreateCameraCapture (0);

/* この設定は,利用するカメラに依存する */
// (2)キャプチャサイズを設定する.
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, w);
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, h);

cvNamedWindow ("Capture", CV_WINDOW_AUTOSIZE);
CvScalar valueH = cvScalar(DEFAULT_H);
CvScalar valueS = cvScalar(DEFAULT_S);

// (3)カメラから画像をキャプチャする
while (1) {
//画像1フレーム分もってくる
frame = cvQueryFrame (capture);

CvSize sizeOfImage = cvGetSize( frame );

IplImage *hsvImage = cvCreateImage(sizeOfImage,IPL_DEPTH_8U,3 ); // HSV画像用IplImage

IplImage *hueImage = cvCreateImage(sizeOfImage,IPL_DEPTH_8U,1); // 色相(H)情報用IplImage
IplImage *saturationImage = cvCreateImage(sizeOfImage,IPL_DEPTH_8U,1); // 彩度(S)情報用IplImage

IplImage *valueImage = cvCreateImage(sizeOfImage,IPL_DEPTH_8U,1); // 明度(V)情報用IplImage
IplImage *mergeImage = cvCreateImage(sizeOfImage,IPL_DEPTH_8U,3 ); // マージ用IplImage
IplImage *sepiaframe = cvCreateImage(sizeOfImage,IPL_DEPTH_8U,3 );


//BGRからHSVに変換する

cvCvtColor(frame, hsvImage, CV_BGR2HSV );
//HSV画像をH、S、V画像に分ける

cvSplit( hsvImage, hueImage, saturationImage, valueImage, NULL );

//HとSの値を変更する

cvSet( hueImage, valueH, NULL );

cvSet( saturationImage, valueS, NULL );

//3チャンネルを結合

cvMerge( hueImage, saturationImage, valueImage, NULL, mergeImage );
//HSVからBGRに変換する

cvCvtColor(mergeImage,sepiaframe,CV_HSV2BGR);

//Captureってウィンドにframe画像を表示
cvShowImage ("Capture", sepiaframe);

c = cvWaitKey (10);
if (c == '\x1b'){
cvReleaseImage(&hsvImage);
cvReleaseImage(&hueImage);
cvReleaseImage(&saturationImage);

cvReleaseImage(&valueImage);

cvReleaseImage(&mergeImage);
cvReleaseImage(&sepiaframe);
break;}
}

cvReleaseImage(&frame);

cvReleaseCapture (&capture);
cvDestroyWindow ("Capture");

return 0;
}