1. 程式人生 > 程式設計 >python讀取影象矩陣檔案並轉換為向量例項

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()函式)

處理矩陣三維轉換時,通常採用旋轉矩陣,但是旋轉變換其實只有三個自由度,用旋轉向量表達時更為簡潔。因此,需要實現從旋轉向量和旋轉矩陣之間的互轉換。

旋轉向量和旋轉矩陣之間可以通過羅德里格斯公式進行轉換:

python讀取影象矩陣檔案並轉換為向量例項

程式碼實現:

可以直接採用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 os
import cv2
import numpy as np
T = 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讀取影象矩陣檔案並轉換為向量例項

以上這篇python讀取影象矩陣檔案並轉換為向量例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。