我在使用 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);
非常感谢
劳伦斯