我需要在值爲CV_32FC1(float)的M(變量類型Mat)中分配值,但長時間大小爲10000x10000。即:使用OpenCV分配到Mat中
for (i=0 ; i<rows; i++)
for (j=0 ; j<cols; j++){
...build variable NEW_VALUE for indexes i, j
M.at<float>(i,j) = NEW_VALUE
}
上面的代碼需要1秒aprox。我看到的其他形式是定義聯合(複製字節):
typedef union{float _float; uchar _uchar[4];} Bits;
...
Bits bits;
float new_value;
for (i=0 ; i<rows; i++)
for (j=0 ; j<cols; j+=4){
...//build variable new_value for indexes i, j
bits._float = new_value;
M.data[i*cols + j] = bits._uchar[0];
M.data[i*cols + j+1] = bits._uchar[1];
M.data[i*cols + j+2] = bits._uchar[3];
M.data[i*cols + j+3] = bits._uchar[3];
}
這比第一個更快。但不工作。我試過了:
memcpy(&M.data[i*cols + j], bits._uchar[0], 1);
memcpy(&M.data[i*cols + j+1], bits._uchar[1], 1);
...
但是不行。
和:
memcpy(&M.at<float>(i,j), bits._uchar, 4);
很慢也。
我需要知道如何將NEW_VALUE的字節在M中
您正在將NEW_VALUE設置爲指針,而不是它指向的數據。 –
ups,我錯過了*那邊,謝謝@MichaelBurdinov – paghdv
不客氣。但請注意,此方法僅適用於內存中連續的圖像,即您的圖像不是某個較大圖像的ROI。要解決這個問題,你可以使用'float * prtM = M.ptr(i);'爲每一行。 –