练习题7
使用cvCmp()创建一个掩码。加载一个真实的图像。使用cvSplit()将图像分割成红,绿,蓝三个单通道图像。
a. 找到并显示绿图。
b. 克隆这个绿图两次(分别命名为clone1和clone2)。
c. 求出这个绿色平面的最大值和最小值。
d. 将clone1的所有元素赋值为thresh=(unsigned char)((最大值-最小值)/2.0)。
e. 将clone2所有元素赋值为0,然后调用函数cvCmp (green_image, clone1, clone2, CV_CMP_GE)。现在clone2将是一个标识绿图中值超过thresh的掩码图像。
f. 最后,使用cvSubS(green_image,thresh/2, green_image, clone2)函数并显示结果。
程序运行结果对比图:#include "cv.h" #include "highgui.h" int main() { IplImage *img=cvLoadImage("lena.jpg"); IplImage *imgR=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1); IplImage *imgG=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1); IplImage *imgB=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1); IplImage *clone1,*clone2;//克隆这个绿图两次 double MaxPix=0; double MinPix=255; IplImage *dstMerge=cvCreateImage(cvGetSize(img),img->depth,img->nChannels); cvSplit(img,imgR,imgG,imgB,NULL); cvMerge(imgR,imgG,imgB,NULL,dstMerge); //克隆这个绿图两次 clone1=cvCloneImage(imgG); clone2=cvCloneImage(imgG); //这次是为了保存分割后的原来的绿色通道图像 IplImage *cloneGreen=cvCloneImage(imgG); //找到绿色图像的最大值和最小值 cvMinMaxLoc(clone1,&MinPix,&MaxPix); //将clone1的所有元素赋值为thresh=(unsigned char)((最大值-最小值)/2.0) double thresh=(MaxPix-MinPix)/2.0; cvSet(clone1,cvScalar(thresh)); //将clone2所有元素赋值为0,然后调用函数cvCmp(green_image,clone1,clone2,CV_CMP_GE).现在 //clone2将是一个标识绿图中超过thresh的掩码图像 cvSet(clone2,cvScalar(0)); cvCmp(imgG,clone1,clone2,CV_CMP_GE); //最后,使用cvSubs(green_image,thresh/2,green_image,clone2)函数并显示结果 cvSubS(imgG,cvScalar(thresh/2),imgG,clone2); cvNamedWindow("MergeImage",1); cvNamedWindow("GreenImageSUB",1); cvNamedWindow("GreenImageCLONE",1); //找到并显示绿色图像 cvShowImage("GreenImageSUB",imgG); cvShowImage("GreenImageCLONE",cloneGreen); cvShowImage("MergeImage",dstMerge); cvWaitKey(0); cvReleaseImage(&img); cvReleaseImage(&imgR); cvReleaseImage(&imgG); cvReleaseImage(&imgB); cvReleaseImage(&dstMerge); cvDestroyWindow("&MergeImage"); cvDestroyWindow("GreenImageCLONE"); cvDestroyWindow("GreenImageSUB"); return 0; }
Opencv练习题3-7
最新推荐文章于 2024-04-21 22:41:32 发布