opencv学习之四:rgb通道的分离以及直方图的显示计算

1、rgb分离

rgb分离用一个简单的函数split即可,注意,分离之后如果分别显示3个通道,得到的结果将是都是灰色的。需要将生成的3个单通道merge一下,才是我们看到的效果:

split和merge的代码如下:
	vector<Mat> bgr_planes(src.channels());
		vector<Mat> mbgr(src.channels());
		
		split(src, bgr_planes);

		mbgr[0] = bgr_planes[2];
		mbgr[1] = zero;
		mbgr[2] = zero;
		merge(mbgr, displayb);

		mbgr[0] = zero;
		mbgr[1] = bgr_planes[1];
		mbgr[2] = zero;	
		merge(mbgr, displayg);
	
		mbgr[0] = zero;
		mbgr[1] = zero;
		mbgr[2] = bgr_planes[0];
		merge(mbgr, displayr);

		imshow("r",displayr);
		imshow("g", displayg);
		imshow("b", displayb);

2、直方图的显示计算:

使用的是calcHist函数,我们将图像的3个通道分离之后,分别计算3个通道的直方图。
calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate);中bgr_planes为要计算的直方图图像,为mat类型,b_hist储存计算之后的直方图,histSize, histRange分别为大小和范围。
Mat histImage(hist_h, hist_w, CV_8UC3, Scalar(0, 0, 0));创建了一个画布显示直方图, normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());直方图均衡化。

3、直方图反向投影

    图像的反向投影图是用输入图像的某一位置上像素值(多维或灰度)对应在直方图的一个bin上的值来代替该像素值,所以得到的反向投影图是单通的。用统计学术语,输出图像象素点的值是观测数组在某个分布(直方图)下的概率。
反向投影图 - 十三月de天空 - 十三月de天空
 
其中 b(xi) 表示在位置
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值