Opencv Mat元素操作

2021-06-25 16:33:56 字數 1603 閱讀 9899

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...