Opencv c++;向量推回不一致行为

Opencv c++;向量推回不一致行为,opencv,vector,push-back,Opencv,Vector,Push Back,我推回两组相同类型(CV_32FC)的相等矩阵(A1=B1,A2=B2,A3=B3),它们位于相同类型的两个不同向量(Va和Vb)中(A={A1,A2,A3},B={B1,B2,B3})。当我逐对比较向量的内容时(Va[0]与Vb[0],Va[1]与Vb[1],Va[2]与Vb[2]),它们是不同的。这怎么可能 代码说明: A= imgs_lab_channels. Lab_channel_current_FG = Foreground image Lab_channel_current_B

我推回两组相同类型(CV_32FC)的相等矩阵(A1=B1,A2=B2,A3=B3),它们位于相同类型的两个不同向量(Va和Vb)中(A={A1,A2,A3},B={B1,B2,B3})。当我逐对比较向量的内容时(Va[0]与Vb[0],Va[1]与Vb[1],Va[2]与Vb[2]),它们是不同的。这怎么可能

代码说明:

A= imgs_lab_channels. 
Lab_channel_current_FG = Foreground image 
Lab_channel_current_BG = Background image
Lab_channel_current=Lab_channel_current_FG+Lab_channel_current_BG
push Lab channel_current into vector Lab_channels
So B=Lab_channels
我查一查

Lab_channel_current= imgs_lab_channels[i].
当我从向量A和B中读回矩阵时,它们是不同的

代码段:

std::vector<cv::Mat> imgs_lab_channels;
split(imgs_lab, imgs_lab_channels); 
std::vector<cv::Mat> Lab_channels;
cv::Mat Lab_channel_current_FG;
cv::Mat Lab_channel_current_BG;
cv::Mat Lab_channel_current;
for(int i = 0; i < 3; i++)
{
// FG_mask and BG_mask are 0-1 binary matrices of type 32FC1 
// and with same size as imgs_lab_channels. FG_mask and BG_mask
// select the Foreground and background respectively. Omitted for  
// sake of clarity

    Lab_channel_current_FG=imgs_lab_channels[i].mul(FG_mask);
    Lab_channel_current_BG=imgs_lab_channels[i].mul(BG_mask);
    // add the FG and the BG image
    Lab_channel_current=Lab_channel_current_FG+Lab_channel_current_BG;
    Lab_channels.push_back(Lab_channel_current);
}
for(int j=0;j<3;j++)
{
    temp2 = Lab_channels[j]-imgs_lab_channels[j];
    double min2, max2;
    cv::minMaxLoc(temp2, &min2, &max2);
    std::cout << "temp2 min,max="<< min2 << "," << max2 << std::endl;
}
std::向量imgs\u lab\u信道;
分割(imgs_实验室、imgs_实验室通道);
std::矢量实验室通道;
cv::Mat Lab_通道_电流_FG;
cv::Mat实验室通道电流BG;
cv::Mat Lab_通道_电流;
对于(int i=0;i<3;i++)
{
//FG_掩码和BG_掩码是32FC1类型的0-1二进制矩阵
//与imgs_lab_通道尺寸相同。FG_掩模和BG_掩模
//分别选择前景和背景。对于
//为了清楚起见
Lab_channel_current_FG=imgs_Lab_channels[i].mul(FG_mask);
Lab_channel_current_BG=imgs_Lab_channels[i].mul(BG_掩码);
//添加FG和BG图像
Lab_channel_current=Lab_channel_current_FG+Lab_channel_current_BG;
实验室通道。推回(实验室通道当前);
}

对于(int j=0;jLab_channels.push_back(Lab_channel_current.clone());它起作用了。我还不知道何时使用clone。无论何时需要深度拷贝;)