矩阵opencv c ++的点积和设定元素

时间:2013-06-20 09:41:20

标签: c++ opencv ubuntu product

我在使用Qt Creator的ubuntu版本上使用opencv库,我遇到了以下问题。我正在尝试计算矢量的点积和图像中的RGB值,然后我想将这些值返回到保存结果的单独矩阵。在此操作之后,我想要从另一个中减去该矩阵,但是,为了确保矩阵处于正确的数据类型,我使用convertTo()函数,并发现这会引发分段错误。

这似乎与元素编写有关,如果我将点积的输入更改为它工作的预定义值。

我花了几个小时试图让这个跑步,我不确定我做错了什么。任何帮助将不胜感激。

int x,y;
float Xn = 0.95;
float Zn = 1.089;

//destination matrix
Mat XYZ_mat(10, 10, CV_32FC3, Scalar(1.0,1.0,1.0));

//source matrix
Mat BGR_mat(10, 10, CV_32FC3, Scalar(1.0,1.0,1.0));


//source vectors
float LAB_mult_x[3][1] ={0.4, 0.2, 0.01};
Mat LAB_Mult_x(3, 1, CV_32FC1, LAB_mult_x);

float LAB_mult_y[3][1] ={0.35, 0.71, 0.11};
Mat LAB_Mult_y(3, 1, CV_32FC1, LAB_mult_y);

float LAB_mult_z[3][1] ={0.18, 0.07, 0.95};
Mat LAB_Mult_z(3, 1, CV_32FC1, LAB_mult_z);


for (x=0;x<=XYZ_mat.rows;x++){
    for (y=0; y<=XYZ_mat.cols;y++){

        //extacts BGR vals from image
        Vec3f temp1 = BGR_mat.at<Vec3b>(x,y);
        temp2 = Mat(temp3);

        XYZ_mat.at<Vec3b>(x,y)[0] = float(temp2.dot(LAB_Mult_x)/Xn);
        XYZ_mat.at<Vec3b>(x,y)[1] = float(temp2.dot(LAB_Mult_y));
        XYZ_mat.at<Vec3b>(x,y)[2] = float(temp2.dot(LAB_Mult_z)/Zn);

}
}

//segmentation fault is thrown here
XYZ_mat.convertTo(XYZ_mat,CV_32FC3);

非常感谢

劳伦斯

0 个答案:

没有答案