opencv中的split函式

2021-07-12 01:58:07 字數 1258 閱讀 2865

split函式的功能是通道分離

原型

void split(const mat& src,mat *mvbegin)

void split(inputarray m, outputarrayofarrays mv);
用法很顯然,第乙個引數為要進行分離的影象矩陣,第二個引數可以是mat陣列的首位址,或者乙個vector物件

std::vectorchannels;

mat achannels[3];

//src為要分離的mat物件

split(src, achannels); //利用陣列分離

split(src, channels); //利用vector物件分離

imshow("b",channels[0]);

imshow("g",channels[1]);

imshow("r",channels[2]);

注意:opencv中,rgb三個通道是反過來的

很簡單,但是有些小問題,我的環境是vs2015,opencv3.10,使用第二種方法時在debug模式下會發生執行時錯誤(***.exe已停止工作),

調成release就可以解決這個錯誤,網上還有一種說法是vector沒有分配記憶體空間導致的錯誤,經測試,在release下不分配初始空間也能正常執行。

糾正:是鏈結的庫有問題,在debug下發生執行時錯誤是因為使用的庫是名字末尾不帶d的庫,因此產生錯誤,只要將庫正確鏈結就可以正常執行。opencv2如果出現有可能是同樣的原因,應該使用名字末尾帶d的庫,也有可能是沒有分配初始空間,而opencv3不用分配初始空間

可能有人會問為什麼分離出的通道都是黑白灰,而不是紅綠藍。原因是分離後為單通道,相當於分離通道的同時把其他兩個通道填充了相同的數值。比如紅色通道,分離出紅色通道的同時,綠色和藍色被填充為和紅色相同的數值,這樣一來就只有黑白灰了。那麼紅色體現在哪呢?可以進行觀察,會發現原圖中顏色越接近紅色的地方在紅色通道越接近白色。

在純紅的地方在紅色通道會出現純白。

r值為255 -》rgb(255,255,255),為純白

Visual Basic中的Split函式

返回乙個從零開始的一維陣列,其中包含指定數量的子字串。function split byval expression as string,optional byval delimiter as string optional byval limit as integer 1,optional byv...

C 中的Split 函式

一 string.split方法提供了如下6個過載函式 名稱 說明string.split char 返回包含此例項中的子字串 由指定 char 陣列的元素分隔 的 string 陣列。由 net compact framework 支援。string.split char,int32 返回包含此例...

C 中的Split 函式

一 string.split方法提供了如下6個過載函式 名稱說明 string.split char 返回包含此例項中的子字串 由指定 char 陣列的元素分隔 的 string 陣列。由 net compact framework 支援。string.split char,int32 返回包含此例...