1 に等しい値を含む行列を宣言しました: cv::Mat mat_cal = cv::Mat::ones(width, height, CV_8U);
ここで、定数を掛けたいと思います。つまり、値が A=0.3 に等しい 1 つの行列です。次に、次のように書きました。 cv::Mat mat_cal = cv::Mat::ones(width, height, CV_8U)*A ;
でも、結果?0 0 0 0 0 0 0 0の行列
解決策はありますか?
1 に等しい値を含む行列を宣言しました: cv::Mat mat_cal = cv::Mat::ones(width, height, CV_8U);
ここで、定数を掛けたいと思います。つまり、値が A=0.3 に等しい 1 つの行列です。次に、次のように書きました。 cv::Mat mat_cal = cv::Mat::ones(width, height, CV_8U)*A ;
でも、結果?0 0 0 0 0 0 0 0の行列
解決策はありますか?
問題の一部は、行列の型がCV_8U
8 ビットの符号なし整数である0.3
こと0
です。代わりにCV_32F
(32 ビット浮動小数点) に設定します。
また、スカラーを掛ける場合は、覚えていれば以下のようにします。2 つの行列の乗算は同じようには機能しません。
float A = 0.3;
cv::Mat mat_cal = cv::Mat::ones(width, height, CV_32F)*A;
char i = 1;
i *= 0.3;
結果 ?0
それは単なる古い整数の丸めです。
double または float 値を持つ Mat が必要な場合は、最初に正しい型を使用します。
cv::Mat::ones(width, height, CV_32F)*0.3f; // float
また:
cv::Mat::ones(width, height, CV_64F)*0.3; // double