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);
どうもありがとう
ローレンス