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