上一篇文章,我們定義了矩陣,這篇文章我們來為矩陣增加一些常用方法。
toString方法
toString方法通常用作將物件轉成字串描述,所以我們將此方法定義為輸出矩陣元素。
Mat.prototype.toString = function(){
>var tempData = this.data,
text = "Mat(" this.type ") = {n",
num = this.col * this.channel;
for(var i = 0; i text = "["
for(var j = 0; j text = (tempData[i * num j] "," );
}
text = "]n";
}
text = "}";
return text;
};
這樣,我們就可以用:
console.log(mat) ;
來輸出矩陣了。
clone方法
實際上,我們可以透過建構函式進行複製操作,不過依然提供一個方法來方便記憶、使用。
Mat.prototype.clone = function(){
>return new Mat(this.row, this.col, this.data);
};
取得指定元素
我們有兩種方法獲取矩陣元素。
陣列方法
由於實際上Mat是以陣列形式保存資料的,而資料看起來是這樣的:
R00 G00 B00 A00 R01 G01 B01 A01 … R0n G0n B0n A0n
R10 G10 B10 A10 R11 G11 B11 A11 …… R1n G1n B1n A1n
……
Rm0 Gm0 Bm0 Am0 Rm1 Gm1 Bm111, Nmn G、B、A分別代表各通道的數值,而下標第一個表示行號,第二個表示列號。即第k行,第j列的G通道數值就是Gkj。
我們很容易得到對於一個Mat類型的mat來說,第k行,第j列像素的每個元素分別是:
Rkj = mat.data[(k * mat.col j) * 4 0]
Gkj = mat.data[(k * mat.col j) * 4 1]
Bkj = mat.data[(k * mat.col j) * 4 2]
Akj = mat .data[(k * mat.col j) * 4 3]
Buffer部分引用方法 透過Buffer的部分引用,我們可以得到矩陣的部分引用,例如我們可以利用這個來取得一個像素點的資料數組,而改變這個數組中的值,對應的矩陣資料也會改變;再例如我們可以以其他資料類型的方式讀取資料。而這些對於普通Array是不能實現的。下面我們來看看at方法的實作:
var type = __type,
x = __x || 0,
y = __y || 0,
rowLen = this.col * this.channel * this.bytes,
len = 1;
if(type.indexOf("Vec") > -1){
var temp = __type.match(/Vec(d )([ a-z])/);
len = parseInt(temp[1]);
switch(temp[2]){
case "b":
type = "uchar";
break;
case "s":
type = "short";
break;
case "i":
type = "int";
break;
case "f":
type = "float";
break;
case "d":
type = "double";
break;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
switch(type){
case "uchar":
return new Uint8Array(this.buffer, (y * rowLen x), len);
break;
case "short":
return new Int16Array(this.buffer, (y * rowLen x * 2), len);
break;
case "int":
return new Int32Array(this.buffer, (y * rowLen x * 4), len);
如果你對ArrayBuffer和TypedArray還不太清楚,可以參考:HTML5 中的新陣列。
String type - 需要傳回的資料類型。支援:
uchar 無符號8位元整數
short 有符號16位元整數
int 有符號32位元整數
float 有符號32位元浮點數
double 有符號64位元浮點數
Vec 向量形式
向量形式字串拼字是:Vec (型) (個數),例如Vecb4就是4個無符號8位元整數,這是常見的得到一個像素點資料的方法,例如為了得到mat第j行,第k列的像素數據,可以使用:
mat.at("Vecb4", j, k);
int x - 要取得的元素在矩陣的行數。
int y - 要取得的元素在矩陣的列數。
getRow方法和getCol方法
類似at的實作方法,我們可以輕易寫出取得某一行或某一列的方法:
Mat.prototype.getRow = function(__i){
var len = this.col * this.channel,
rowLen = len * this.bytes,
i = __i || 0;
return new this.data.constructor(this.buffer, i * rowLen, len);
};
程式碼如下:
.getCol = function(__i){
var len = this.col * this.channel,
rowLen = len * this.bytes,
array = [],
i = __i || 0 ;
function getAllElement(__constructor){
var row = this.row,
channel = this.channel;
for(var j = 0; j array .push(new __constructor(this.buffer, j * rowLen i, 1 * channel));
}
}
return array; };
程式碼如下:
Mat.prototype.rowRange = function(__i, __j){
var len = this.col * this.channel,
rowLen = len * this.bytes,
array = [],
i = __i || 0,
j = __j || this.row;
function getAllElement (__constructor){
var row = this.row;
for(var k = i; k array.push(new __constructor(this.buffer, k * rowLen, len));
}
getAllElement(this.data.constructor);
複製程式碼
程式碼如下:
Mat.prototype.colRange = function(__i, __j){
var len = this. col * this.channel,
rowLen = len * this.bytes,
array = [],
i = __i || 0,
j = __j || this.col;
function getAllElement(__constructor){
var row = this.row
channel = this.channel;
} } getAllElement(Float64Array); return array; > 這四種方法回傳的都是一種Array

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1
好用且免費的程式碼編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境