1. 程式人生 > >opencv(三)對影象進行簡單算術運算(加減乘除)

opencv(三)對影象進行簡單算術運算(加減乘除)

opencv可以將影象以不同的方式組合,影象其實就是一般的矩陣,所以它們可以做加減乘除。opencv提供了各種影象算術操作符。

1【首先我們對兩幅影象進行操作】

當我們需要一些影象特效或者在影象上疊加資訊時,就需要用到影象加法。我們只需呼叫cv::add函式就可以完成,更準確的說是cv::addWeighted()函式來完成影象的加法。cv::addWeighted(image, 0.7, imag1, 0.9, 0.,result);

效果如下


所有的二值算術函式工作方式都是一樣的,他接受兩個輸入變數和一個輸出變數。在一些情況下,還需要指定權重作為運算中的標量因子。每種函式都有幾個不同的形式:

//c[i] = a[i] + b[i];

cv::add(imageA, imageB, resultC);

//c[i] = a[i] + k;

cv::add(imageA, cv::Scalar(k), resultC);

//c[i] = k1 * a[i] + k2 * b[i] + k3;

cv::addWeighted(imageA, k1, imageB, k2, k3, resultC);

//c[i] = k * a[i] + b[i];

cv::scaleAdd(imageA, k,imageB,resultC);

//對某些函式,還可以指定一個影象的掩模

//if(mast[i]) c[i] = a[i] + b[i]

cv::add(imageA,imageB, resultC, mask);

參與運算的影象必須相同的大小和型別(輸出影象如果合適不符,那麼他會被重新分配)同樣,由於運算是逐畫素進行的,輸入影象之一也可以作為輸出影象。

opencv給我們過載了操作符,上面的操作可以換成下面:reslut = 0.7 * image + 0.9 * image,效果是一樣的。有時候我們想對彩色影象的一個通道進行運算,我們可以使用cv::split函式將彩色影象的三個通道分別拷貝到三個獨立的cv::Mat例項中,然後對其中一個通道單獨處理:

std::vector(cv::Mat) planes;

cv::split(image, planes);

planes[0] += image1;

cv::merge(planes, result);

函式cv::merge是cv::splitr的對偶運算,它將三個單通道合併一個彩色通道。

其他操作基本都和加運算差不多,這裡就不一一介紹了。