use cvThreshold in three channel and truncate values above 100

void sum_rgb(IplImage *src, IplImage *dst) {
	//Allocate individual image planes.
	IplImage *r = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
	IplImage *g = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
	IplImage *b = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);

	//split image onto the color planes.
	cvSplit(src, r, g, b, NULL);

	//Temporary storage.
	IplImage *s = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);

	//Add equally weighted rgb values.
	//dst = src1*alpha + src2*beta + gamma;
	cvAddWeighted(r, 1./3., g, 1./3., 0.0, s);
	cvAddWeighted(s, 2./3., b, 1./3., 0.0, s);

	//Truncate values above 100.
	cvThreshold(s, dst, 100, 100, CV_THRESH_TRUNC);

	cvReleaseImage(&r);
	cvReleaseImage(&g);
	cvReleaseImage(&b);
	cvReleaseImage(&s);
}
int _tmain(int argc, _TCHAR* argv[]) {
	//Create a named window with the name of the file.
	cvNamedWindow("Test", CV_WINDOW_AUTOSIZE);

	//Load the image from the given file name.
	IplImage *src = cvLoadImage("Lena.jpg");
	IplImage *dst = cvCreateImage(cvGetSize(src), src ->depth, 1);
	sum_rgb(src, dst);

	//Show the image in the named window
	cvShowImage("Test", dst);

	//Idle until the user hits the "Esc" key.
	while(1) {
		if (cvWaitKey(10) == 27)
			break;
	}

	//Clean up
	cvDestroyWindow("Test");
	cvReleaseImage(&src);
	cvReleaseImage(&dst);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值