gpt4 book ai didi

opencv - 使用OpenCV在Mat中分配

转载 作者:行者123 更新时间:2023-12-02 17:50:58 25 4
gpt4 key购买 nike

我需要在M(变量类型Mat)中为值CV_32FC1(浮点型)赋值,但是时间长为10000x10000。即:

 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秒左右的时间。我看到的另一种形式是定义一个联合(复制字节):
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);

也很慢

我需要知道如何在M内正确复制new_value的字节

最佳答案

您的代码很慢,因为您要为每个像素执行大量计算。乘法运算不是便宜的运算,您可以显式(i * cols + j)或隐式(at (i,j))多次使用它。阅读 this tutorial可以更好地了解如何有效访问像素。

关于opencv - 使用OpenCV在Mat中分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21713088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com