opencv reshape函式詳解

2021-09-26 19:38:54 字數 1541 閱讀 8421

在opencv中,reshape函式比較有意思,它既可以改變矩陣的通道數,又可以對矩陣元素進行序列化,非常有用的乙個函式。

函式原型:

c++

: mat mat:

:reshape

(int cn,

int rows=0)

const

引數比較少,但設定的時候卻要千萬小心。

cn: 表示通道數(channels), 如果設為0,則表示保持通道數不變,否則則變為設定的通道數。

rows: 表示矩陣行數。 如果設為0,則表示保持原有的行數不變,否則則變為設定的行數。

首先設定乙個初始矩陣:乙個20行30列1通道的乙個矩陣

int

main()

第一次變化:通道數不變,將矩陣序列化1行n列的行向量
int

main()

第二次變化:通道數不變,將矩陣序列化n行1列的列向量
int

可見,序列成列向量比行向量要麻煩一些,還得去計算出需要多少行。但我們可以先序列成行向量,再轉置

第三次變化:通道數由1變為2,行數不變

從結果可以看出,列數被分出一半,放在第二個通道裡去了。

同理,如果通道數由1變為3,行數不變。則每通道的列數變為原來的三分之一。

需要注意的是,如果行保持不變,改變的通道數一定要能被列數整除,否則會出錯。

第四次變化:通道數由1變為2,行數變為原來的五分之一

可見,不管怎麼變,都遵循這樣乙個等式:

變化之前的 rowscolschannels = 變化之後的 rowscolschannels

我們只能改變通道數和行數,列數不能改變,它是自動變化的。

但是要注意的是,在變化的時候,要考慮到是否整除的情況。如果改變的數值出現不能整除,就會報錯。

opencv在序列化的時候是行序列化還是列序列化呢?

我們知道,在matlab裡面,是列序列化, 即取值為從上到下,從左到右,opencv又是怎麼樣的呢

從結果看出,不管是變化成行向量還是列向量,opencv都是行序列化,即從左到右,從上到下,與matlab是不一樣的。

函式基礎 匿名函式,函式,箭頭函式,立即執行函式

doctype html html lang en head meta charset utf 8 meta name viewport content width device width,initial scale 1.0 title document title head body body ...

函式 常見函式

def fib n if n 1 return 1if n 2 return 1return fib n 1 fib n 2 def hannuo n,a,b,c n 表示有n個盤子 a 代表第乙個塔,開始的塔 b 代表第二個塔,過渡塔 c 代表第三個塔,目標塔 d.在 中n 2,這個分支可以不要,...

Lua 函式 函式

在lua中,函式是一種對語句和表示式進行抽象的主要機制。函式既可以完成某項特定的任務,也可以只做一些計算並返回結果。lua具有一項非常於總不同的特徵,允許函式返回多個結果 s,e string.find hello lua users lua print s,e 7 9 以lua編寫的函式同樣可以返...