本節書摘來自華章計算機《opencv圖像處理》一書中的第2章,第2.5節,作者:[西]葛羅瑞亞·布埃諾·加西亞(gloria bueno garcía)著,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視
算術運算是重載運算。這就意味着可以在mat圖像上執行和下面這個例子一樣的運算:

在opencv中,一種運算的結果值受到飽和運算(saturation arithmetic)的影響。這就意味着最終的值實際上是在0~255範圍内最近似的一個整數。
當用掩碼進行運算時,位運算bitwise_and()、bitwise_or()、bitwise_xor()和bitwise_not()非常有用。掩碼是二值圖像,表示這樣一些像素(而不是整幅圖像)在其上僅執行一種運算。下面的bitwise_and示例向您展示如何使用and運算剪裁一幅圖像的一部分:
在讀取并顯示輸入圖像之後,通過繪制一個全白色的圓可建立一個掩碼。and運算會用到這個掩碼。該邏輯運算隻對掩碼值非零的那些像素進行,其餘像素不會受到影響。最後,在本示例中用白色填充生成圖像的外部(即圓的外部)。在進行該運算時,使用了之前介紹過的一種像素通路方法。由此産生的圖像見圖2-2:
接下來,給出另一個很棒的示例,估計pi的值。如圖2-3所示,讓我們考慮一個正方形及其内接圓:
我們假設有一個未知邊長的正方形圖像和一個内接圓。可以通過在圖像内的随機位置繪制許多像素并計算位于内接圓中的像素個數來估計内接圓的面積。另一方面,估計正方形的面積為繪制的像素總數。這樣使用上面的公式就可以估計出pi的值。
下面的算法模拟了這個過程:
(1)在一個黑色的正方形圖像上,畫一個純白色的内接圓;
(2)在另一個黑色的正方形圖像上(和上面的正方形大小相同),随機繪制大量像素;
(3)在兩幅圖像之間進行一個and運算,并計算所産生的圖像中的非零像素個數;
(4)使用公式估計pi。
估計pi值示例的代碼如下:
該程式完全遵循上面的算法。注意,使用函數countnonzero計算非零(在該示例中是白色)像素。對于npixels=8000,其估計值為3.125。npixels的值越大,估計結果也就越好,如圖2-4所示。