8/12/2014

Opencv float array to Mat


you can input float array data to Mat through this way.

float H[9]={1,2,3,4,5,6,7,8,9};
Mat TT = Mat(3,3,CV_32FC1, &H);

But becareful, if H value is changed, TT value is also changed.

See the example source code.



float H[9];
 for(int i=0; i< 9; ++i)
  H[i] = i;
 
 for(int i=0; i< 9; ++i)
  cout << i << " : " << H[i] << endl;

 Mat TT = Mat(3,3,CV_32FC1, &H);
 cout << TT << endl; 

 for(int i=0; i< 9; ++i)
  H[i] = i*10;

 cout << "TT values are chaned.." << endl;
 cout << TT << endl;

 cout << endl;
 
 
If we modify code like this..
 
Mat TT = Mat(3,3,CV_32FC1, &H);

-> Mat TT = Mat(3,3,CV_32FC1, &H).clone();

TT value is not affected by float array.


8/11/2014

CUDA Link2005 error.

I meet the this error when compile CUDA.

error LNK2005: "int __cdecl XXXX" (?XXXXX@@YAHXZ) already defined in XXX.cu.obj

I solved error from the web page. -> http://stackoverflow.com/questions/5295503/cuda-lnk2005-error-on-device-function-used-in-header-file

In my case, I add "inline" keyword front of cuda function name.
ex)
 __device__ void matrix_set_identity(GPU_Matrix *A)

->

inline  __device__ void matrix_set_identity(GPU_Matrix *A)


Thank you.

proof, lim x->0 sin(x)/x = 1