矩阵 计算机应用,《计算机视觉算法:基于OpenCV的计算机应用开发》 —3.3 元素级矩阵操作...
3.3 元素級矩陣操作
基于元素的(元素級)矩陣操作是計(jì)算機(jī)視覺中的一類數(shù)學(xué)函數(shù)和算法,它處理矩陣的各個(gè)元素,或者說,圖像中的每個(gè)像素。注意基于元素的操作可以并行化,因此矩陣元素的處理順序不重要。這個(gè)特點(diǎn)是本節(jié)函數(shù)和算法與本章的后續(xù)小節(jié)中的函數(shù)和算法的重要區(qū)別。
3.3.1 基本操作
OpenCV提供了所有必要的函數(shù)和重載操作符來進(jìn)行兩個(gè)矩陣之間或矩陣和標(biāo)量之間的加減乘除操作。
3.3.1.1 加法操作
函數(shù)add和運(yùn)算符+可用于兩個(gè)矩陣間元素相加或一個(gè)矩陣的元素與一個(gè)標(biāo)量相加,如下例所示:
可以使用以下代碼替換前面代碼中的最后一行:
下圖顯示了兩個(gè)圖像相加后的結(jié)果:
如果你想給Mat對象的每個(gè)元素都加上一個(gè)標(biāo)量值,可以用類似如下代碼:
如果在灰度圖像上執(zhí)行上述代碼,結(jié)果將比源圖像有更高的亮度。請注意,如果圖像有三個(gè)通道,則必須使用包含三個(gè)元素的向量而不是單個(gè)值。例如,為了使RGB圖像更亮,你可以使用如下代碼:
下圖展示了上述代碼執(zhí)行之后的效果,處理后的圖像亮度比源圖像提高了:
在前面的示例代碼中,僅通過在每個(gè)像素上增加一個(gè)數(shù)值即可獲得更亮的圖像。
3.3.1.2 加權(quán)加法
除了簡單將兩個(gè)圖像相加,你還可以使用加權(quán)加法,加權(quán)加法會對每個(gè)圖像增加權(quán)重之后再相加。這相當(dāng)于對加法的每個(gè)參與者分別設(shè)置不透明度級別。要進(jìn)行加權(quán)加法,你可以使用addWeighted函數(shù):
如果使用此代碼來處理上一節(jié)中的示例圖片,結(jié)果將類似于下圖:
透明文本類似于通常在照片編輯程序使用的水印。你注意到代碼中對alpha、beta和gamma值的注釋了嗎?顯然,如果beta值為1.0則上面的例子就跟普通的圖像疊加函數(shù)完全相同,此時(shí)疊加文本沒有透明度。
3.3.1.3 減法操作
與兩個(gè)Mat對象疊加類似,你也可以使用substract函數(shù)或-運(yùn)算符從一個(gè)圖像的所有元素中減去另一個(gè)圖像的所有元素。請看下例:
上面代碼中的最后一行也可以替換為:
如果我們使用前面示例中的圖像,則減法操作的結(jié)果如下:
從源圖像中減去較高像素值(較亮像素)會生成深色的疊加文本。另外,與加法不同,減法運(yùn)算結(jié)果與其操作數(shù)的順序相關(guān)。嘗試交換操作數(shù),自己看看會發(fā)生什么。
就像圖像加法一樣,也可以讓圖像的所有像素減去一個(gè)常數(shù)。你可以猜到,從所有像素中減去常量值將生成更暗的圖像(取決于該值的大小),這與加法運(yùn)算相反。下面展示了通過簡單的減法操作使圖像變得更暗的例子:
如果源圖像是三通道RGB圖像,則需要使用向量作為第二個(gè)操作數(shù):
3.3.1.4 乘法和除法操作
與加法和減法類似,你還可以將Mat對象的所有元素與另一個(gè)Mat對象的所有元素相乘或相除。同樣,兩個(gè)操作都可以使用矩陣和標(biāo)量。乘法可以使用OpenCV的multiply函數(shù)(類似于Mat :: mul函數(shù)),而除法可以使用divide函數(shù)。
見下例:
前面代碼中的scale是一個(gè)附加參數(shù),可以傳給multiply和divide函數(shù)來縮放結(jié)果中Mat對象的所有元素。你還可以在矩陣乘法或除法中使用標(biāo)量,如下示例所示:
顯然,前面的代碼將生成兩個(gè)圖像,一個(gè)是源圖像亮度的5倍(變亮),一個(gè)是源圖像亮度的1/5(變暗)。這里要注意的一點(diǎn)是,與加法和減法不同,乘除法得到的圖像不會均勻地變亮或變暗,你應(yīng)該會注意到較亮的區(qū)域變得更亮,反之亦然。其原因顯然是由于乘法和除法運(yùn)算的效果與加減法不同,經(jīng)過乘除法操作后,較亮像素的值上升或下降要快得多。有趣的是,在大多數(shù)照片編輯應(yīng)用程序中,就是使用這個(gè)技術(shù)來使圖像的明亮區(qū)域變亮或變暗的。
總結(jié)
以上是生活随笔為你收集整理的矩阵 计算机应用,《计算机视觉算法:基于OpenCV的计算机应用开发》 —3.3 元素级矩阵操作...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebBrowser介绍——Javasc
- 下一篇: ant java 返回_使用Ant自动化