python讀取圖像矩陣文件并轉換為向量實例
假設圖像矩陣大小為32×32,將其轉換為向量,首先創建1×1024的NumPy數組,然后打開給定的文件,循環讀出文件的前32行,并將每行的頭32個字符值存儲在NumPy數組中
import numpy as np def img2vector(filename): returnVect = np.zeros((1, 1024)) fr = open(filename) for i in range(32): lineStr = fr.readline() for j in range(32): returnVect[0, 32*i+j] = int(lineStr[j]) return returnVect
補充知識:旋轉向量和旋轉矩陣的互相轉換(python cv2.Rodrigues()函數)
處理矩陣三維轉換時,通常采用旋轉矩陣,但是旋轉變換其實只有三個自由度,用旋轉向量表達時更為簡潔。因此,需要實現從旋轉向量和旋轉矩陣之間的互轉換。
旋轉向量和旋轉矩陣之間可以通過羅德里格斯公式進行轉換:
代碼實現:
可以直接采用opencv中的Rodrigues函數實現,函數原型:
void Rodrigues( InputArray src, OutputArray dst, OutputArray jacobian = noArray() );
參數:
輸入src:旋轉向量(3*1或者1*3)或者旋轉矩陣(3*3);
輸出dst:旋轉矩陣(3*3)或者旋轉向量(3*1或者1*3);
輸出jacobin:可選項,輸出雅克比矩陣(3*9或者9*3),輸入數組對輸出數組的偏導數。
python代碼舉例:
# -*- coding: UTF-8 -*-import osimport cv2import numpy as npT = np.zeros((1,3), np.float32)a = (0.2,0.4,0.8)print (a)R = cv2.Rodrigues(a)print (R[0])v3 = (R[0][2,1],R[0][0,2],R[0][1,0])print (v3)c = cv2.Rodrigues(v3)print (c[0])b = cv2.Rodrigues(R[0])print (b[0])p = (-2.100418,-2.167796,0.27330)print(cv2.Rodrigues(p)[0])
例子如下:
以上這篇python讀取圖像矩陣文件并轉換為向量實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。
相關文章: