opencv cvSplit cvMerge

/* Splits a multi-channel array into the set of single-channel arrays or
   extracts particular [color] plane */
CVAPI(void)  cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1,
                      CvArr* dst2, CvArr* dst3 );

作用:将多通道图像分离为单通道图像

src:多通道源图像

dst0、dst1、dst2、dst3:单通道结果图像

源图像和结果图像的大小相同,深度类型相同,仅有通道类型不同


##############################################################

/* Merges a set of single-channel arrays into the single multi-channel array
   or inserts one particular [color] plane to the array */
CVAPI(void)  cvMerge( const CvArr* src0, const CvArr* src1,
                      const CvArr* src2, const CvArr* src3,
                      CvArr* dst );

作用:将单通道图像合并为多通道图像

src0、src1、src2、src3:单通道源图像

dst:多通道结果图像

源图像和结果图像的大小相同,深度类型相同,仅有通道类型不同


###########################################################


程序:将图像lena.jpg分离为三个单通道图像c1、c2、c3,再将其合并为单通道图像(蓝、绿、红)

void splitAndMerge(void)
{
	IplImage *img=cvLoadImage("lena.jpg");
	IplImage *c1=cvCreateImage(cvGetSize(img), img->depth, 1);
	IplImage *c2=cvCreateImage(cvGetSize(img), img->depth, 1);
	IplImage *c3=cvCreateImage(cvGetSize(img), img->depth, 1);
	IplImage *rImg=cvCreateImage(cvGetSize(img), img->depth, 3);
	IplImage *gImg=cvCreateImage(cvGetSize(img), img->depth, 3);
	IplImage *bImg=cvCreateImage(cvGetSize(img), img->depth, 3);

	if (NULL == img || NULL == c1 || NULL == c2 || NULL == c3 || NULL == rImg || NULL == gImg || NULL == bImg)
		exit(0);

	cvSplit(img, c1, c2, c3, NULL);

	cvNamedWindow("img");
	cvShowImage("img", img);

	cvZero(rImg);
	cvZero(gImg);
	cvZero(bImg);
	cvMerge(c1, NULL, NULL, NULL, bImg);
	cvMerge(NULL, c2, NULL, NULL, gImg);
	cvMerge(NULL, NULL, c3, NULL, rImg);

	cvNamedWindow("rImg");
	cvNamedWindow("gImg");
	cvNamedWindow("bImg");
	cvShowImage("rImg", rImg);
	cvShowImage("gImg", gImg);
	cvShowImage("bImg", bImg);
	cvWaitKey(0);

	cvReleaseImage(&img);
	cvReleaseImage(&c1);
	cvReleaseImage(&c2);
	cvReleaseImage(&c3);
	
	cvReleaseImage(&rImg);
	cvReleaseImage(&gImg);
	cvReleaseImage(&bImg);

	cvDestroyAllWindows();
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值