opencv-03--图像的算术运算

图像的算术运算

Mat类把很多算数操作符都进行了重载,让它们来符合矩阵的一些运算,如果+、-、点乘等。

下面我们来看看用位操作和基本算术运算来完成colorReduce程序,它更简单,更高效。

将256种灰度阶降到64位其实是抛弃了二进制最后面的4位,所以我们可以用位操作来做这一步处理。

首先我们计算2^8降到2^n中的n:

int n=static_cast<int>(log(static_cast<double>(div))/log(2.0));

然后可以得到mask

mask=0xFF<<n;

用下面简直的语句就可以得到我们想要的结果:

result=( image & Scalar(mask,mask,mask) ) + Scalar(div/2, div/2, div/2);

 

很多时候我们需要对图像的一个通信单独进行操作,比如在HSV色彩模式下,我们就经常把3个通道分开考虑。

vector<Mat> planes;

// 将image分为三个通道图像存储在planes中

split(image,planes);

planes[0]+=image2;

// 将planes中三幅图像合为一个三通道图像

merge(planes,result);

 

posted @ 2014-03-11 15:41  jianguo_wang  阅读(288)  评论(0编辑  收藏  举报