Opencv练习题3-7

练习题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;
}
程序运行结果对比图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值