opencv的mat中元素操作有好幾種方式(opencv中mat是row優先儲存的)。
mat h(100, 100, cv_64f);
for(int i = 0; i < h.rows; i++)
for(int j = 0; j < h.cols; j++)
h.at(i,j)=1./(i+j+1);
2維情況為:
在matrix維度比較大時,兩個的訪問速度差異是很明顯的,下面為我的測試**
int main()
} mat a(1000, 1000, cv_32fc1, tmp);
int count = 0;
double sum = 0.0;
clock_t ref = clock();
while (count < 10)
}} cout << "at access: " << (clock() - ref) / (clocks_per_sec * 10.0) << endl;
cout << sum << endl;
ref = clock();
count = 0;
while (count < 10)
}} cout << "pointer access: " << (clock() - ref) / (clocks_per_sec*10.0) << endl;
cout << sum << endl;
system("pause");
}
測試結果是:
*(float*)(a.data + a.step[0]*i + a.step[1]*j)
如果先解引用,再轉換為對應型別,則得不到想要結果:
(float)*(a.data + a.step[0]*i + a.step[1]*j) // wrong
此外,關於mat和陣列之間相互賦值可以如下操作:
陣列 --> mat
float * proj = new float[he_dimension * dimension];
// do some stuff to proj ...
mat mat_proj(he_dimension, dimension, cv_32f);
mat_proj.data = (uchar *)proj;
mat --> 陣列
mat mat_test(nrows, ncols, cv_32f);
// do some stuff to mat_test
float *arrayfmat = new float[nrows * ncols];
arrayfmat = (float *)mat_test.data;
// do some stuff to arrayfmat
delete arrayfmat;
Opencv Mat操作大全
cpp view plain copy include include using namespace std using namespace cv intmain float array1 用陣列初始化mat mat mat mat 1,3,cv 32f,array mat mat1 mat 1,...
OpenCV Mat類矩陣元素訪問
補充一篇最近使用opencv的學習,關於處理和人臉檢測的函式呼叫。上次部落格中寫了使用最新版本2.4.3中,haar detection執行正常,但是無法找到任何人臉。最近使用了新的c 類的函式呼叫,不再用cvrelease.但是仍舊只有lbp detection工作正常,所以使用了lbp。相信大多...
Numpy陣列操作OpencvMat
二 什麼是numpy 乙個用python實現的科學計算包。包括 1 乙個強大的n維陣列物件array 2 比較成熟的 廣播 函式庫 3 用於整合c c 和fortran 的工具包 4 實用的線性代數 傅利葉變換和隨機數生成函式。numpy和稀疏矩陣運算包scipy配合使用更加方便。numpy num...