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);
opencv-03--图像的算术运算,布布扣,bubuko.com
原文:http://www.cnblogs.com/wjgaas/p/3594089.html