掩碼mask setto用法

2021-09-27 03:13:54 字數 1967 閱讀 5820

首先介紹setto()函式

opencv3.3中給出的庫函式中是這樣介紹setto()函式的:

第乙個引數可以將給定矩陣的值轉變為特定的value值;

第二個引數就是mask掩膜矩陣,可分為新增mask和不新增mask這兩種情況,其中,給定矩陣和掩膜矩陣的尺寸大小要相同。

下面,通過例項來具體說明mask的用法。

一.新增mask的效果

首先,通過創造初始矩陣和3個不同的掩膜矩陣,來分析新增掩膜的作用:

mat src,mask1,mask2,mask3,dst1,dst2,dst3;

/*建立初始矩陣*/

src=mat(3,3,cv_8uc1,scalar(5));

cout<

/*建立3個掩膜矩陣*/

mask1=mat(3,3,cv_8uc1,scalar(0));

mask2=(mat_(3,3)<<1,0,0,2,0,7,1,1,3);

mask3=mat::ones(3,3,cv_8uc1);

cout<

建立的3個掩膜矩陣分別為全零矩陣,個別元素為零的矩陣和元素全為非零的矩陣。

下面通過利用setto()函式轉變初始矩陣各元素的值,設value的值為100:

/*加上mask引數*/

dst1=src.setto(100,mask1);

cout<

比較轉變後的矩陣和掩膜矩陣,可以輕鬆的發現:在掩膜矩陣中,有0元素時,該位置上對應的元矩陣元素的值不會發生改變;而不為0的位置上,原矩陣的值全部變為了設定的value(100)。所以,我給掩膜的定義為:通過在矩陣各位置設定0來掩蓋給定矩陣對應元素的值,使之不發生改變。

二.不新增mask的效果

分別對全零和全為非零的矩陣進行setto()函式轉變。

/*不加mask引數*/

mask1.setto(100);

cout<

可以發現,當沒有掩膜mask的時候,不論給定矩陣的個元素值是否為零,經過setto()變換後,矩陣個元素的值都變成了value(100)。

例項源**如下:

#include 「opencv2/highgui/highgui.hpp」

#include 「opencv2/imgproc/imgproc.hpp」

#include

#include

using namespace std;

using namespace cv;

int main()

{mat src,mask1,mask2,mask3,dst1,dst2,dst3;

/*建立初始矩陣*/

src=mat(3,3,cv_8uc1,scalar(5));

cout<

mask3=mat::ones(3,3,cv_8uc1);

cout<

dst1=src.setto(100,mask1);

cout<

cout<

cout<

mask1.setto(100);

cout<

cout<

return 0;

Maskedit的掩碼含義及用法

maskedit的掩碼含義及用法 maskedit是用來建立編輯框的,但它與edit編輯框可以輸入任意字元不同,maskedit可以限制使用者只能按照既定的輸入格式輸入。掩碼編輯框 maskedit 是一種特殊的編輯框。使用它可以設計出許多複雜的輸入格式。在選用maskedit之後,需要為它設計乙個...

oracle格式掩碼

to char 是把日期或數字轉換為字串 to date 是把字串轉換為資料庫中得日期型別 轉換函式 to char 使用to char函式處理數字 to char number,格式 to char salary,99,999.99 使用to char函式處理日期 to char date,格式 ...

使用者掩碼umask

在linux中,每個使用者都有乙個使用者掩碼umask,每個使用者建立的檔案的預設許可權就於這個umask有關。如果乙個使用者的umask是0022 root使用者的預設umask值 那麼這個使用者建立的目錄的預設許可權為 0777減去0022後的結果,即0755 第乙個0表示強制位和冒險位 如果建...