1

我在使用 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);

非常感谢

劳伦斯

4

0 回答 0