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;
}
use cvThreshold in three channel and truncate values above 100
最新推荐文章于 2021-11-28 22:10:36 发布