使用OpenCV在Mat中指定
我需要用CV_32FC1(float)的值在M(一个变量类型Mat)中赋值,但是在10000x1000的大小下时间很长。i、 e:使用OpenCV在Mat中指定,opencv,mat,Opencv,Mat,我需要用CV_32FC1(float)的值在M(一个变量类型Mat)中赋值,但是在10000x1000的大小下时间很长。i、 e: 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 } 但不起作用 以及: memcpy(&M.a
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
}
但不起作用
以及:
memcpy(&M.at(i,j),bits.uchar,4);
也很慢
我需要知道如何在M的范围内正确复制新_值的字节您的代码很慢,因为您要对每个像素执行大量计算。乘法运算不是一种便宜的运算,您可以显式(i*cols+j)或隐式(at
float *prtM=(float*)M.data;
for (i=0 ; i<rows; i++)
for (j=0 ; j<cols; j++){
//...build variable NEW_VALUE for indexes i, j
*prtM = NEW_VALUE;
prtM++;
}
float*prtM=(float*)M.data;
对于(i=0;ifloat*p;
对于(i=0;iyou正在将新的_值设置为指针,而不是指针指向的数据。ups,我错过了那里的*号,谢谢@MichaelBurdinovYou。但是请注意,这种方法仅适用于内存中连续的图像,即,您的图像不是某个较大图像的ROI。要解决此问题,您可以使用'float*prtM=M.ptr(i)每行。
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);
float *prtM=(float*)M.data;
for (i=0 ; i<rows; i++)
for (j=0 ; j<cols; j++){
//...build variable NEW_VALUE for indexes i, j
*prtM = NEW_VALUE;
prtM++;
}
float* p;
for (i=0 ; i<rows; i++)
{
p = M.ptr<float>(i);
for (j=0 ; j<cols; j++)
{
*p++ = NEW_VALUE;
}
}